Quelqu'un peut-il fournir un exemple simple pour lire et écrire dans le fichier Unicode un caractère Unicode?Écriture et lecture de fichiers Unicode en C++?
2
A
Répondre
1
Sur linux j'utilise la bibliothèque iconv
(link) qui est très standard. Un programme trop simple est:
#include <stdio.h>
#include <stdlib.h>
#include <iconv.h>
#define BUF_SZ 1024
int main(int argc, char* argv[])
{
char bin[BUF_SZ];
char bout[BUF_SZ];
char* inp;
char* outp;
ssize_t bytes_in;
size_t bytes_out;
size_t conv_res;
if(argc != 3)
{
fprintf(stderr, "usage: convert from to\n");
return 1;
}
iconv_t conv = iconv_open(argv[2], argv[1]);
if(conv == (iconv_t)(-1))
{
fprintf(stderr, "Cannot conver from %s to %s\n", argv[1], argv[2]);
return 1;
}
bytes_in = read(0, bin, BUF_SZ);
{
bytes_out = BUF_SZ;
inp = bin;
outp = bout;
conv_res = iconv(conv, &inp, &bytes_in, &outp, &bytes_out);
if(conv_res >= 0)
{
write(1, bout, (size_t)(BUF_SZ) - bytes_out);
}
}
iconv_close(conv);
return 0;
}
Ceci est trop simple pour démontrer la conversion. Dans le monde réel que vous auriez normalement deux boucles imbriquées:
- Une entrée de lecture, donc à manipuler lorsque son plus BUF_SZ
- Une conversion entrée à la sortie. Rappelez-vous que si vous convertissez des fichiers ascii en UTF-32LE, chaque octet de sortie sera égal à 4 octets de sortie. Ainsi, la boucle interne traiterait cela en examinant
conv_res
puis en vérifianterrno
.
0
Si vous utilisez Windows. Utilisez fgetws http://msdn.microsoft.com/en-us/library/c37dh6kf(VS.71).aspx pour lire et fputws http://msdn.microsoft.com/en-us/library/t33ya8ky(VS.71).aspx pour écrire.
L'exemple de code se trouve dans les liens fournis.
2
essayez http://utfcpp.sourceforge.net/. le lien a un exemple introductif pour lire un fichier utf8, ligne par ligne.
Questions connexes
- 1. Unicode dans Regex et DB lecture/écriture
- 2. Lecture/écriture des métadonnées de fichiers en utilisant C/C++
- 3. fichiers en lecture/écriture Serrures
- 4. Lecture (et écriture) de fichiers RTF avec C++/Qt
- 5. Java - Lecture/écriture de fichiers
- 6. Lecture et écriture Bits dans des fichiers texte en Java
- 7. lecture/écriture de fichiers MS Word en Python
- 8. Lecture et écriture DEVMODE.dmColor
- 9. Lecture et écriture Writelog
- 10. Lecture de fichiers Unicode ligne par ligne C++
- 11. C# - lecture/écriture blob de firebird
- 12. écriture et de lecture Plist
- 13. Comment convertir une lecture/écriture binaire en lecture/écriture non binaire en C++
- 14. programmes en cours d'exécution en parallèle, lecture/écriture en C
- 15. lecture/écriture Tiffs en Java
- 16. Lecture et écriture dans EditText
- 17. Lecture et écriture de port série avec C
- 18. ASP.NET - Lecture et écriture dans le système de fichiers, en dehors de l'application
- 19. Bibliothèque de balisage de fichiers audio (lecture/écriture)?
- 20. lecture unicode
- 21. NHibernate: scission en lecture/écriture
- 22. Lecture en écriture des balises WAV/RIFF
- 23. POSIX lecture/écriture brute
- 24. Java SocketChannel écriture et lecture de corrélation
- 25. Le fichier C# en lecture/écriture Le partage de fichiers ne semble pas fonctionner
- 26. Lecture et écriture C struct from embedded lua
- 27. Fichiers SVN et en lecture seule
- 28. Menu texte C++: écriture, lecture et tri des données
- 29. Lecture de texte et écriture dans Excel en Java
- 30. système C appelle ouverture/lecture/écriture/fermeture et O_CREAT | O_EXCL
Quel format? UTF-8, UTF-16 ou UTF-32? –
Et si UTF-16, lequel des 3 formats UTF-16 possibles? Big-endian, little-endian, ou spécifié par BOM? –
Et, sur quelle plateforme? La taille de 'wchar_t' n'est pas partout la même: sous Windows, vous stockez généralement des chaînes en interne sous UTF-16 LE, tandis que sous Linux en UTF-8 (avec' char') ou UTF-32 ('wchar_t'). –