primer lugar usted necesita saber qué codificación su archivo se encuentra, como UTF-8 o UTF-16. ¿Qué está generando este archivo para comenzar?
Después de eso, es relativamente sencillo - que necesita para crear un FileInputStream
envuelto en una InputStreamReader
en lugar de sólo una FileReader
. (FileReader
siempre usa la codificación predeterminada para el sistema.) Especifique la codificación que se utilizará al crear el InputStreamReader
, y si ha elegido la correcta, todo debería comenzar a funcionar.
Tenga en cuenta que no necesita utilizar OpenCSV para verificar esto; puede leer el texto del archivo usted mismo e imprimirlo por completo. No estoy seguro de que me fío System.out
a ser capaz de manejar los caracteres no ASCII, aunque - es posible que desee encontrar una manera diferente de analizar cadenas, tales como impresión de los valores individuales de caracteres como números enteros (preferentemente en hexadecimal) y luego, comparándolos con el charts at unicode.org. Por otro lado, podría intentar la codificación correcta y ver lo que sucede a comenzar con ...
EDIT: Bueno, por lo que si usted está utilizando UTF-8:
CSVReader reader=new CSVReader(
new InputStreamReader(new FileInputStream("d:\\a.csv"), "UTF-8"),
',', '\'', 1);
String[] line;
while ((line = reader.readNext()) != null) {
StringBuilder stb = new StringBuilder(400);
for (int i = 0; i < line.length; i++) {
stb.append(line[i]);
stb.append(";");
}
System.out.println(stb);
}
(os esperan tener un bloque try/finally para cerrar el archivo en su código real.)