2012-04-13 47 views
7

Tengo un problema de codificación muy molesto usando opencsv. Cuando exporto un archivo csv, configuro el tipo de carácter como 'UTF-8'.opencsv CSVWriter que usa utf-8 no parece funcionar para varios idiomas

CSVWriter writer = new CSVWriter(new OutputStreamWriter("D:/test.csv", "UTF-8")); 

pero cuando abro el archivo CSV con Microsoft Office Excel 2007, resulta que tiene 'BOM UTF-8' codificación?

Una vez que guardo el archivo en el Bloc de notas y lo vuelvo a abrir, el archivo vuelve a UTF-8 y todas las letras en él aparecen bien. Creo que he buscado lo suficiente, pero no he encontrado ninguna solución para evitar que mi archivo se convierta en 'UTF-8 BOM'. alguna idea, por favor?

+1

Java no debe agregar una lista de materiales en sí misma, ya que tampoco hay un constructor 'OutputStreamWriter' que tome dos cadenas Supongo que falta algo en el código. ¿Podría la BOM ser parte de la información que escribes? –

Respuesta

13

Supongo que su archivo tiene una codificación 'UTF-8 sin BOM'. Será mejor que alimente la codificación BOM a su archivo, aunque no es necesario en la mayoría de los casos, pero solo una excepción obvia es cuando maneja ms excel.

FileOutputStream os = new FileOutputStream(file); 
os.write(0xef); 
os.write(0xbb); 
os.write(0xbf); 
CSVWriter csvWrite = new CSVWriter(new OutputStreamWriter(os)); 

Ahora su archivo será entendido por excel como utf-8 csv.

+0

¿cuál es el problema al tratar con ms excel? –

+0

¡Esto ha sido una verdadera molestia para mí durante años! Tu solución funciona perfecto Gracias – Ashley

2

UTF-8 y UTF-8 Signature (que incorrectamente se llama a veces como UTF-8 BOM) son las mismas codificaciones, y firma is used only to distinguish it from any other encodings. Cualquier aplicación Unicode debe procesar la firma UTF-8 (que es la secuencia de tres bytes EF BB BF) correctamente.

Por qué Java específicamente agrega esta firma y cómo detenerla haciendo eso, no lo sé.

Cuestiones relacionadas