3 votos

Obteniendo un problema de Unicode/Codepage - Convertir UTF-8 a ANSI con la Geodatabase del Archivo

Tengo un problema de Codepage, y por ahora estoy un poco atascado

Mis datos originales contienen datos de múltiples países entregados en SHP (UTF-8). Los datos se fusionan en un Archivo GeoDB ya que los datos son demasiado grandes para el límite de 2gb de SHP/DBF. Anteriormente pude utilizar el método *.CPG con un conjunto de datos SHP más pequeño para mostrar correctamente los datos que contienen caracteres que coinciden con ANSI (ê, ë, ô, etc.). Ahora que los datos están en un archivo GeoDB no puedo utilizar este método.

Extrañamente, cambié la codificación de un conjunto de datos SHP-UTF8 más pequeño a SHP-ANSI utilizando un proceso de FME, luego importé los datos en un GeoDB de archivo y los datos se mostraron correctamente en ArcMap.

Ahora bien, transformar todos los datos de origen SHP-UTF8 a SHP-ANSI es un proceso bastante largo (muchos archivos que conforman un gran conjunto de datos), así que mi pregunta es si es posible establecer o convertir el CodePage de los datos en un Archivo GeoDB para que el conjunto de datos fusionado se muestre correctamente?

Los datos basados en UTF8 tienen el siguiente aspecto : Calle Koöperasie

Dónde debería estar (ANSI): Calle Koöperasie

1voto

Symmetric Puntos 158

Me temo que esto no es una gran respuesta, pero el Archivo Geodatabase espera cadenas UTF16, por lo que podría ser la causa de su problema. Los documentos del desarrollador dicen:

En general, wstring se utiliza para todos los parámetros de caracteres en la API. Esto implica que estamos utilizando wchar_t. Pero además de eso, estamos estamos utilizando caracteres codificados en UTF-16 en la matriz wchar. Nuestro contrato es que las cadenas wchar que proporcionemos como salida sean siempre caracteres codificados en UTF-16 y requerimos que los desarrolladores proporcionen lo mismo para las cadenas de entrada cadenas de entrada que utilizan en cualquier llamada a la función de la API.

No estoy seguro de cuál es la solución...

1voto

rptony Puntos 700

Te recomiendo que cambies el registro y pongas el dbf por defecto en UTF-8. Ver Cómo: leer y escribir archivos shapefile y dBASE codificados en varias páginas de código

Después de este cambio, simplemente exporte el shapefile a la geodatabase del archivo. Todo estará bien.

1voto

Brad Puntos 1004

Usted menciona que está convirtiendo SHP-UTF8 a SHP-ANSI. Técnicamente, sólo tiene que hacer una conversión de DBF-UTF8 a DBF-ANSI. Tal vez si te centras en este problema puedas ahorrar mucho tiempo.

Si tiene una copia de ArcPad (puede probar la evaluación de 20 minutos) puede intentar los siguientes pasos:

  1. Inicie ArcPad con un mapa vacío
  2. Añadir un Shapefile que está actualmente en UTF-8
  3. Pulse CTRL-ENTER para abrir la ventana del script
  4. Copie y pegue el siguiente script y ejecútelo para cambiarlo a ANSI
  5. Cerrar ArcPad

A continuación se muestra el VBScript de ArcPad que debe pegar en la ventana de Script:

Sub ChangeCodePage(layer, newCodePage)
  Dim rs, origCodePage, i, fld, count
  layer.Editable = True
  Set rs = layer.Records
  origCodePage = rs.CodePage
  Console.Print "Changing code page from " & origCodePage & " to " & newCodePage
  If origCodePage = newCodePage Then
    Console.Print "Done"
    Exit Sub
  End If
  rs.MoveFirst
  count = 0
  While not rs.EOF
    For i = 1 to rs.Fields.Count
      rs.CodePage = origCodePage
      fld = rs.Fields(i).value
      rs.CodePage = newCodePage
      rs.Fields(i).value = fld
    Next
    rs.Update
    rs.MoveNext
    count = count + 1
  Wend
  Console.Print count & " records converted"
End Sub

Call ChangeCodePage(Map.Layers(1), 1252)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X