2010-03-11 24 views
6

Tengo algunos problemas para escribir en un archivo en Unicode dentro de mi programa c. Estoy tratando de escribir una cadena japonesa Unicode en un archivo. Cuando voy a verificar el archivo, está vacío. Si intento una cadena que no sea unicode, funciona bien. ¿Qué estoy haciendo mal?Escribiendo en un archivo en Unicode

setlocale(LC_CTYPE, ""); 
FILE* f; 
f = _wfopen(COMMON_FILE_PATH,L"w"); 
fwprintf(f,L"日本語"); 
fclose(f); 

Oh mi sistema: Me postulo de Windows. Y mi IDE es Visual Studio 2008.

+0

estoy publicando esto como un comentario en lugar de una respuesta, porque no mayor idea sobre la C, pero me pregunto si su código fuente está en UTF-8, y el compilador piensa que es ASCII . –

+0

No, no creo que sea el caso. El compilador sabe que es UTF-8, me aseguré de ello: p – Lefteris

+0

OK. Valió la pena intentarlo de todos modos. :-) –

Respuesta

8

Es posible que deba agregar la codificación al modo. Posiblemente esto:

f = _wfopen(COMMON_FILE_PATH,L"w, ccs=UTF-16LE"); 
+0

Gracias ... esto funcionó. Pero eso crea una pregunta adicional. En realidad quería esto para poder escribir unicode a los archivos generalmente. El japonés era solo un ejemplo. Esto funcionará para todos los idiomas compatibles con Unicode, ¿correcto? – Lefteris

+0

Correcto. No debe depender del idioma. –

0

Haciendo lo mismo con fopen() funciona para mí aquí. Estoy usando Mac OS X, entonces no tengo _wfopen(); asumiendo que _wfopen() no le está devolviendo cosas malas, su código debería funcionar.

Edición: También probé en cygwin, también parece funcionar bien.

+0

No funcionó para mí :(, _wfopen devuelve un puntero normal FILE * Estoy ejecutando Windows. Y mi IDE es Visual Studio 2008. – Lefteris

0

No puedo encontrar una referencia a _wfopen en ninguno de mis cuadros, sin embargo, no veo por qué abrirlo con fopen debería causar un problema, todo lo que necesita es un puntero de archivo.

Lo que importa es si C reconoce o no los valores internos de Unicode y empuja esos valores binarios al archivo correctamente.

Intenta usar fopen como Carl sugirió, debería funcionar correctamente.

Editar: si aún no funciona, puede tratar de definir los caracteres como sus valores enteros y presionarlos con fwprintf(), sé que es engorroso y no es una buena solución a la larga, pero debería funcionar como bien.

Cuestiones relacionadas