J’écris une application Java pour exporter des données d’Oracle vers un fichier CSV.
Malheureusement, le contenu des données peut être assez délicat. La virgule reste le délimiteur, mais certaines données sur une ligne pourraient ressembler à ceci :
| ID | FN | LN | AGE | COMMENT |
|----------------------------------------------------------------|
| 123 | John | Smith | 39 | I said "Hey, I am 5'10"." |
|----------------------------------------------------------------|
Voici donc l’une des chaînes dans la colonne comment :
I said “Hey, I am 5’10”."
Sans plaisanter, j’ai besoin d’afficher le commentaire ci-dessus sans compromis dans Excel ou Open Office à partir d’un fichier CSV généré par Java, et bien sûr sans perturber les autres cas d’échappement habituels (c’est-à-dire les guillemets doubles classiques et la virgule classique dans un tuple). Je sais que les expressions régulières sont puissantes, mais comment peut-on atteindre cet objectif dans une situation aussi compliquée ?
String escaped = StringEscapeUtils
.escapeCsv("I said \"Hey, I am 5'10\".\""); // I said "Hey, I am 5'10"."
System.out.println(escaped); // "I said ""Hey, I am 5'10""."""
Dé-échapper depuis CSV
String unescaped = StringEscapeUtils
.unescapeCsv("\"I said \"\"Hey, I am 5'10\"\".\"\"\""); // "I said ""Hey, I am 5'10""."""
System.out.println(unescaped); // I said "Hey, I am 5'10"."