2009-11-08 25 views
13

Estoy tratando de analizar un archivo .csv con OpenCSV en NetBeans 6.0.1. Mi archivo contiene algunos caracteres Unicode. Cuando lo escribo en salida, el personaje aparece en otra forma, como (HJ1'-E /;). Cuando abro este archivo en el Bloc de notas, se ve bien.Parse CSV archivo que contiene un carácter Unicode utilizando OpenCSV

El código que he utilizado:

CSVReader reader=new CSVReader(new FileReader("d:\\a.csv"),',','\'',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); 
    } 

Respuesta

31

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.)

Cuestiones relacionadas