none
BCP, exportar a CSV caracteres ñ, acentos... RRS feed

  • Pregunta

  • Hola :)

    Tengo que generar una gran cantidad de ficheros de intercambio entre dos sistemas, en formato CSV. Parto de dos BDs, con intercalación SQL_Latin1_General_CP1_CI_AI y Modern_Spanish_CI_AS. En ambos casos, al exportar mis datos mediante BCP, las eñes, acentos, etc. se exportan como caracteres raros. 

    He intentado utilizar un archivo .fmt indicando Modern_Spanish_CI_AS en los campos de cadena, pero no consigo que funcione.

    ¿Me podéis echar una mano? Gracias :)

    miércoles, 27 de enero de 2021 18:37

Respuestas

  • El Collation de la BD no tiene importancia, BCP lo interpreta automáticamente y recibe los caracteres correctos. El problema suele estar en el fichero que se graba en disco, que tiene que generarse con el formato adecuado para el programa que lo va a leer. Así como la base de datos tiene un especificador de Collation que define el juego de caracteres que se usa, en cambio no existe nada parecido para los ficheros que se graban en disco. Por ejemplo, si grabas un fichero con el formato Windows-1252, solo se leerá bien en un programa que lo interprete como Windows-1252. Similarmente, si lo grabas como UTF8, solo lo leerá bien un programa que entienda UTF8. Y dentro del fichero, no pone en ningún sitio si es un formato o es el otro; tienes que saberlo tú.

    En resumidas cuentas, primero tienes que averiguar cuál es el formato que entiende el programa con el que vas a leer esos CSV. Y después le dices a BCP que genere ese formato, usando el parámetro -C. Por ejemplo, para generar el formato ANSI de Windows, se usa -C ANS. Para generar un formato con un codepage concreto, se pone el número del codepage, por ejemplo, -C 850. Y para generar Unicode codificado en UTF8 se pone -C 65001 (solo si tienes una versión moderna de BCP).

    La documentación está aquí. Baja hasta donde pone -C en la lista de parámetros.

    • Marcado como respuesta EvaEtx jueves, 28 de enero de 2021 10:12
    jueves, 28 de enero de 2021 7:39

Todas las respuestas

  • El Collation de la BD no tiene importancia, BCP lo interpreta automáticamente y recibe los caracteres correctos. El problema suele estar en el fichero que se graba en disco, que tiene que generarse con el formato adecuado para el programa que lo va a leer. Así como la base de datos tiene un especificador de Collation que define el juego de caracteres que se usa, en cambio no existe nada parecido para los ficheros que se graban en disco. Por ejemplo, si grabas un fichero con el formato Windows-1252, solo se leerá bien en un programa que lo interprete como Windows-1252. Similarmente, si lo grabas como UTF8, solo lo leerá bien un programa que entienda UTF8. Y dentro del fichero, no pone en ningún sitio si es un formato o es el otro; tienes que saberlo tú.

    En resumidas cuentas, primero tienes que averiguar cuál es el formato que entiende el programa con el que vas a leer esos CSV. Y después le dices a BCP que genere ese formato, usando el parámetro -C. Por ejemplo, para generar el formato ANSI de Windows, se usa -C ANS. Para generar un formato con un codepage concreto, se pone el número del codepage, por ejemplo, -C 850. Y para generar Unicode codificado en UTF8 se pone -C 65001 (solo si tienes una versión moderna de BCP).

    La documentación está aquí. Baja hasta donde pone -C en la lista de parámetros.

    • Marcado como respuesta EvaEtx jueves, 28 de enero de 2021 10:12
    jueves, 28 de enero de 2021 7:39
  • Alberto,

    Muchísimas gracias, ha solucionado mi problema a la perfección :)

    Un saludo

    jueves, 28 de enero de 2021 10:13