Qual codificação de caracteres é usada pelo arquivo DBF nos shapefiles?

52

Qual codificação de caracteres é usada pelo arquivo dbf nos shapefiles? Parece que é tratado de maneira diferente, com base no programa e nas configurações de codificação locais da máquina. Qual codificação é 'certa' - especificada para o formato?

Mnementh
fonte
Você deve conceder definitivamente o sinalizador de resposta a alfonx. @underdark Sem ofensa!
JJD 28/07

Respostas:

60

O padrão DBF original define o uso de ISO8859-1 e apenas ISO8859-1. Portanto, quando você obtém um Shapefile realmente compatível com os padrões, deve ser ISO8859-1. Obviamente, essa restrição (muito antiga) não é realmente utilizável atualmente.

ArcGIS e Geopublisher, AtlasStyler e Geoserver começaram a estender o padrão para definir a codificação. Para o ArcGIS , por exemplo, basta criar um arquivo .cpg (com o mesmo nome de base dos outros Shapefiles) e preenchê-lo com o nome da codificação.

por exemplo, crie um myshape.cpg com um editor de texto e insira 5 caracteres "UTF-8" e salve-o. Se você abrir o Shapefile no ArcGIS, ele lerá o conteúdo textual do DBF nesse conjunto de caracteres.

Geoserver: o Geoserver WFS pode exportar qualquer camada WFS como um Shapefile compactado. Quando isso é feito, um arquivo .cst está contido no zip, fazendo exatamente o mesmo que o arquivo .cpg.

Atenção: Tudo isso se aplica apenas aos dados, não aos nomes das colunas. Você realmente deve usar apenas ASCII nos nomes das colunas de um DBF se quiser que o arquivo possa ser aberto com outros programas.

Dica: Para alterar a codificação de um DBF, abra-o com o OpenOffice Calc. Escolha Salvar como ... clique em "Opções de filtro" no canto inferior esquerdo e pressione Salvar. Você pode definir a codificação para converter o conteúdo do texto.

alfonx
fonte
3
Ótimo post! O mundo seria um lugar melhor se as pessoas enviassem seus arquivos de forma com arquivos .cpg.
Underdark
2
Você tem uma referência para o conjunto de caracteres ISO8559-1 como o conjunto de caracteres oficial? As especificações do DBF que encontrei são muito curtas e não mencionam isso.
22412 Chris
3
Se você receber um, General input/output errorprovavelmente não possui o Base instalado . O problema é o mesmo, se você usa o OpenOffice ou o LibreOffice.
JJD 28/07
2
+1 para a dica do OpenOffice / LibreOffice Calc. Lá, você pode garantir que o arquivo DBF tenha a codificação assumida. No entanto, como JJD apontou, também no Ubuntu você deve ter o LibreOffice Base instalado para abrir arquivos DBF no Calc.
Marian
11
Um .cpgarquivo também deve funcionar bem no QGIS, a partir da libgdal 1.9. Às vezes até parece ser necessário: ssrebelious.wordpress.com/2012/03/11/...
krlmlr
11

Tenho certeza de que não há codificação "certa". Um arquivo .dbf pode estar em qualquer codificação e você poderá abrir o Shapefile e ler os atributos corretamente, se souber.

Você pode encontrar o white paper da ESRI aqui: http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Normalmente, espero que um shapefile seja UTF-8 ou no local do país coberto (geralmente alguma codificação em latim).

underdark
fonte
7

Sempre que vejo uma pergunta sobre codificação, indico as pessoas a este artigo: http://www.joelonsoftware.com/articles/Unicode.html

Como diz:

Não faz sentido ter uma string sem saber qual codificação ela usa. Você não pode mais enfiar a cabeça na areia e fingir que o texto "simples" é ASCII.

Mark Ireland
fonte
Exatamente! Acontece o tempo todo que as pessoas me dizem que eu enviei um arquivo com a codificação incorreta apenas porque um editor (np ++ na maioria das vezes) adivinha. 1
unicoletti
3

Uma maneira simples é converter o arquivo shp em um arquivo csv. E use enca ou iconv para detectar a codificação. Eu tentei com arquivos UTF8 e gb18030 e funciona.

Frank gu
fonte
+1 para a resposta como uma maneira de descobrir a codificação atual. Penso, porém, que a questão estava procurando mais o que seria uma codificação padrão, se houver.
Get Spatial
Este post também aborda a questão de como detectar codificação: gis.stackexchange.com/questions/12218/...
toms