2017-10-11 12 views
0

Je travaille avec opencsv (2.3), je crée l'en-tête du fichier csv à partir du fichier de propriétés qui contient des caractères spéciaux.Encodage UTF-8 dans opencsv

Je code en utilisant UTF-8 et définissez la propriété en tant qu'en-tête à csv.

Mais je vois toujours le fichier CSV créé ne reflète pas l'encodage.

(j'ai utilisé la même approche pour créer des PDF à l'aide JasperReports, là, je pouvais voir les colonnes avec des caractères spéciaux sont codés bien et présentés correctement)

version Java: 7

propriétés Contenu du fichier: (é est stockée sous forme de se à © et ü est stocké sous forme ü)

lan.response = Nombre de reponses

lan.exef = EXECU tion

lan.exeg = Ausführung

approche à l'aide csv:

/* properties file*/ 
final File propertiesFile = new File(System.getProperty("user.home"), "tmp/lan.properties"); 
final FileInputStream fis= new FileInputStream(propertiesFile); 

final InputStreamReader inputStreamReader = new InputStreamReader(fis, "UTF-8"); 

final Properties properties= new Properties(); 
properties.load(inputStreamReader); 

properties.list(System.out); 

/*CSV Header*/ 
StringBuilder header = new StringBuilder(); 
header.append(properties.get(lan.response)).append(","); 
header.append(properties.get(lan.exef)).append(","); 
header.append(properties.get(lan.execg)); 

String[] colHeader = header.split(","); 

    FileOutputStream fos = new FileOutputStream(fileName); 
    Writer fw = new OutputStreamWriter(fos, StandardCharsets.UTF_8); 
    CSVWriter csvWriter = new CSVWriter(fw, ";"); 

    // add header 
    csvWriter.writeNext(colHeader); 
    // add data 
    String[] col= new String[3]; 

    for(Customer c : customerList) { 
     col[0] = c.getCustomerName(); 
     col[1] = c.getCustomerId(); 
     col[2] = c.getCustomerBirthDate(); 
     csvWriter.writeNext(col); 
    } 

    csvWriter.close(); 

Quelqu'un peut-il s'il vous plaît aidez-moi que je suis capable de voir les caractères spéciaux dans d'autres formats de fichiers (ex: PDF) pas en CSV? Lorsque vous exécutez votre application, démarrez-la avec le fichier -Dfile.encoding = UTF-8.

+0

Toute aide s'il vous plaît? Avant de remplir les valeurs au format CSV, j'ai tout essayé. Et il s'affichait correctement. Donc je suppose que le problème est avec CSV qui n'accepte pas les caractères spéciaux et les encoder automatiquement à ISO-8859-1 et montrant quelques symboles –

+0

Dois-je utiliser la version supérieure du fichier opencsv jar ou des idées? –

Répondre

0

Vous pouvez voir quelques options dans this stackoverflow question. Mon souci ici est que vous forcez votre entrée et votre sortie à être UTF-8 mais les String et StringBuilders que vous créez entre les deux utilisent l'encodage par défaut du système, qui dans votre cas semble être ISO-8859-1. Je me demande si le passage de l'UTF-8 à l'ISO-8859-1 en UTF-8 est le problème.