Saltar al contenido

¿Cómo escapar de la coma y las comillas dobles al mismo tiempo para el archivo CSV?

Si hallas algún fallo con tu código o proyecto, recuerda probar siempre en un entorno de testing antes aplicar el código al proyecto final.

Solución:

Hay varias bibliotecas. Aquí hay dos ejemplos:


❐ Idioma Apache Commons

Apache Commons Lang incluye una clase especial para escapar o recuperar cadenas (CSV, EcmaScript, HTML, Java, Json, XML): org.apache.commons.lang3.StringEscapeUtils.

  • Escapar a CSV

    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""."""
    
  • Unescape de 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"."
    

* Puedes descargarlo desde aquí.


❐ OpenCSV

Si utiliza OpenCSVno tendrás que preocuparte por escapar o no escapar, solo por escribir o leer el contenido.

  • Archivo de escritura:

    FileOutputStream fos = new FileOutputStream("awesomefile.csv"); 
    OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
    CSVWriter writer = new CSVWriter(osw);
    ...
    String[] row = 
        "123", 
        "John", 
        "Smith", 
        "39", 
        "I said "Hey, I am 5'10".""
    ;
    writer.writeNext(row);
    ...
    writer.close();
    osw.close();
    os.close();
    
  • Archivo de lectura:

    FileInputStream fis = new FileInputStream("awesomefile.csv"); 
    InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
    CSVReader reader = new CSVReader(isr);
    
    for (String[] row; (row = reader.readNext()) != null;) 
        System.out.println(Arrays.toString(row));
    
    
    reader.close();
    isr.close();
    fis.close();
    

* Puedes descargarlo desde aquí.

Excel tiene que ser capaz de manejar exactamente la misma situación.

Ponga esas cosas en Excel, guárdelas como CSV y examine el archivo con un editor de texto. Entonces sabrá las reglas que aplica Excel a estas situaciones.

Haga que Java produzca la misma salida.

Los formatos que utiliza Excel están publicados, por cierto…

**** Edición 1: **** Esto es lo que hace Excel
**** Edición 2: **** Tenga en cuenta que php fputcsv hace exactamente lo mismo que excel si usa ” como el recinto.

[email protected]
Richard
"This is what I think"

se transforma en esto:

Email,Fname,Quoted  
[email protected],Richard,"""This is what I think"""

Gracias a Tony y Paul por la rápida retroalimentación, es muy útil. De hecho, descubrí una solución a través de POJO. Aquí está:

if (cell_value.indexOf(""") != -1 || cell_value.indexOf(",") != -1) 
    cell_value = cell_value.replaceAll(""", """");
    row.append(""");
    row.append(cell_value);
    row.append(""");
 else 
    row.append(cell_value);

en resumen, si hay un carácter especial como una coma o una comilla doble dentro del string dentro de la celda, luego escape primero de las comillas dobles (""") agregando comillas dobles adicionales (como """"), luego ponga todo entre comillas dobles (como """+theWholeThing+""" )

Aquí tienes las reseñas y valoraciones

Te invitamos a añadir valor a nuestra información tributando tu experiencia en los informes.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *