[C con Clase] Problema UTF8
Programante
programante en gmail.com
Mar Feb 17 17:19:26 CET 2009
Kenji Chavez escribió:
> Tengo un pequeño problema en cuanto a utf8 y el lenguaje C (utilizo el
> CodeGear C++Builder).
> Leo los archivos utilizando este codigo:
>
> FILE *FileIN,*FileOUT;
> FileIN=fopen("filename","r");
> char string[600];
> WideChar C[600],S[100];
> fgets(string,600,FileIN);
> wcscpy(C,UTF8Decode(string).c_bstr()); // widechar copy
>
> y los lee bien (esto se muestra en el Editbox cuando corro el programa):
>
> Edit1->Text=C;
>
> Resultado ===> "3021";"亜";"7";"ア アシア つ.ぐ T1 や つぎ つぐ"
>
> El problema esta que cuando quiero escribir el resultado en un archivo:
>
> FileOUT=fopen("txt.txt","w");
> fwrite(Edit8->Text.c_str(),strlen(Edit8->Text.c_str()),1,FileOUT);
>
> Resultado ===> "3021";"?";"7";"? ??? ?.? T1 ? ?? ??"
>
> Me sale este resultado, como si no conociera los caracteres que graba.
> La pregunta es, ¿Cómo escribo el resultado (el que me sale con los
> caracteres utf8) en un archivos?
Estás convirtiendo el UTF-8 a UCS-2 o UTF-16. Entonces no puedes
grabarlo con
fwrite(Edit8->Text.c_str(),strlen(Edit8->Text.c_str()),1,FileOUT);
strlen() funciona con cadenas ascii y utf8, pero no con caracteres
UTF-16, que pueden tener (y normalmente tienen)
el caracter 0 por en medio. Utiliza *wcslen() para trabajar con ellas.
Mejor aún, seguramente existe un *
Edit1->Text.size() que puedas utilizar.
*
*
Más información sobre la lista de distribución Cconclase