2009-05-23 17 views
7

Tengo una pregunta simple que hacer. Tengo un archivo de texto UTF 16 para leer que comienza con FFFE. ¿Cuáles son las herramientas de C++ para manejar este tipo de archivos? Solo quiero leerlo, filtrar algunas líneas y mostrar el resultado.Leer archivos Unicode C++

Parece simple, pero solo tengo experiencia en el trabajo con archivos ascci simples y estoy apurado. Estoy usando VS C++, pero no quiero trabajar con C++ administrado.

Saludos

Aquí un poner un ejemplo muy simple

wifstream file; 
file.open("C:\\appLog.txt", ios::in); 

wchar_t buffer[2048]; 
file.seekg(2); 
file.getline(buffer, bSize-1); 

wprintf(L"%s\n", buffer); 
file.close(); 

Respuesta

2

Puede utilizar fgetws, que lee los caracteres de 16 bits. Su archivo está en orden little-endian, byte. Dado que las máquinas x86 también son poco endian, debería poder manejar el archivo sin muchos problemas. Cuando quiera hacer una salida, use fwprintf.

Además, estoy de acuerdo en que más información podría ser útil. Por ejemplo, puede estar utilizando una biblioteca que abstraiga algo de esto.

+0

Sí, ya lo dijo todo, más información podría ser útil. Intenté en msdn, libro de Jeffrey Richter, pero parece que no tienen buenos ejemplos cuando hablan de este tema. Gracias – Andres

0

El FFFE es sólo la lista de materiales (marca de orden de bytes) inicial. Simplemente lea el archivo como lo hace normalmente, pero dentro de un búfer ancho.

+0

código de ejemplo es siempre una buena idea - ¿cómo se sabe cómo se lee normalmente un archivo? –

+0

Si bien estoy de acuerdo con usted, Neil, Andrés sí dice: "pero tengo experiencia en el trabajo con archivos ascci simples". ;) – xian

1

Dado que tiene prisa, utilice ifstream en modo binario y haga su trabajo. Tuve los mismos problemas contigo y esto me salvó el día. (no es una solución recomendada, por supuesto, es sólo un truco)

ifstream file; 
    file.open("k:/test.txt", ifstream::in|ifstream::binary); 

    wchar_t buffer[2048]; 
    file.seekg(2); 
    file.read((char*)buffer, line_length); 
    wprintf(L"%s\n", buffer); 
    file.close(); 
+0

Nick esta respuesta realmente me ayudó. fgetws requiere un buffer de tamaño. –

Cuestiones relacionadas