¿Qué codificación de caracteres utiliza el archivo DBF en los archivos de forma?

52

¿Qué codificación de caracteres utiliza el archivo dbf en los shapefiles? Parece que se maneja de manera diferente, según el programa y la configuración de codificación local de la máquina. ¿Qué codificación es 'correcta' - especificada para el formato?

Mnementh
fuente
Definitivamente debe otorgar el indicador de respuesta a alfonx. @underdark ¡Sin ofender!
JJD

Respuestas:

60

El estándar original DBF define el uso de ISO8859-1 , y solo ISO8859-1. Entonces, cuando obtienes un Shapefile que realmente cumple con los estándares, debería ser ISO8859-1. Por supuesto, esta restricción (muy antigua) no es realmente utilizable hoy en día.

ArcGIS y Geopublisher, AtlasStyler y Geoserver comenzaron a extender el estándar para definir la codificación. Para ArcGIS , por ejemplo, simplemente cree un archivo .cpg (con el mismo nombre base que los otros Shapefiles) y complételo con el nombre de la codificación.

por ejemplo, cree un myshape.cpg con un editor de texto e inserte 5 caracteres "UTF-8" y guárdelo. Si luego abre el Shapefile en ArcGIS, lee el contenido textual del DBF en ese juego de caracteres.

Geoserver: Geoserver WFS puede exportar cualquier capa WFS como un Shapefile comprimido. Cuando se hace esto, un archivo .cst está contenido en el archivo zip, haciendo exactamente lo mismo que el archivo .cpg.

Atención: todo esto solo se aplica a los datos, no a los nombres de columna. Realmente solo debe usar ASCII en los nombres de columna de un DBF si desea que el archivo se pueda abrir con otros programas.

Sugerencia: para cambiar la codificación de un DBF, ábralo con OpenOffice Calc ... elija Guardar como ... haga clic en "Opciones de filtro" en la parte inferior izquierda y presione guardar. Luego puede definir la codificación para convertir el contenido del texto.

alfonx
fuente
3
¡Buena publicación! El mundo sería un lugar mejor si la gente enviara sus archivos de forma con archivos .cpg.
oscuro
2
¿Tiene una referencia para el juego de caracteres ISO8559-1 que es el juego de caracteres oficial? Las especificaciones de DBF que he encontrado son muy cortas y no lo mencionan.
Chris
3
Si recibe un General input/output errormensaje, probablemente no tenga Base instalada . El problema es el mismo si usa OpenOffice o LibreOffice.
JJD
2
+1 para la sugerencia OpenOffice / LibreOffice Calc. Allí puede asegurarse de que el archivo DBF tenga la codificación supuesta. Sin embargo, como JJD señaló, también en Ubuntu debe tener LibreOffice Base instalado para abrir archivos DBF en Calc.
Marian
1
Se .cpgsupone que un archivo también funciona bien en QGIS, a partir de libgdal 1.9. A veces incluso parece ser necesario: ssrebelious.wordpress.com/2012/03/11/…
krlmlr
11

Estoy bastante seguro de que no hay una codificación "correcta". Un archivo .dbf puede estar en cualquier codificación y podrá abrir el Shapefile y leer los atributos correctamente si lo sabe.

Puede encontrar el documento técnico de ESRI aquí: http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Por lo general, espero que un archivo de forma sea UTF-8 o en el local del país cubierto (a menudo algo de codificación latina).

bajo oscuro
fuente
7

Cada vez que veo una pregunta sobre la codificación, remito a las personas a este artículo: http://www.joelonsoftware.com/articles/Unicode.html

Como dice:

No tiene sentido tener una cadena sin saber qué codificación utiliza. Ya no puede meter la cabeza en la arena y pretender que el texto "simple" es ASCII.

Mark Ireland
fuente
¡Exactamente! Sucede todo el tiempo que la gente me dice que les he enviado un archivo con la codificación incorrecta solo porque un editor (np ++ la mayoría de las veces) toma conjeturas. +1
unicoletti
3

Una manera simple es convertir el archivo shp a un archivo csv. Y use enca o iconv para detectar la codificación. Intenté con archivos UTF8 y gb18030 y funciona.

Frank gu
fuente
+1 para la respuesta como una forma de descubrir la codificación actual. Sin embargo, creo que la pregunta era buscar más de lo que sería una codificación estándar, si la hubiera.
Obtenga espacial
Esta publicación también aborda la cuestión de cómo detectar la codificación: gis.stackexchange.com/questions/12218/…
toms