[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