Проблема чтения dBase DBF с неанглийскими символами - PullRequest
1 голос
/ 15 марта 2011

У меня есть инструмент, который читает файлы dBase и загружает содержимое в SQL Server, часть системы для импорта шейп-файлов.Это работает, но теперь у нас есть требование импортировать файлы, которые содержат неанглийские символы (норвежский в данном случае могут быть другими языками позже), и они повреждены.

Файлы dBase читаются с использованиемOleDbDataAdapter.Пошагово просматривая код, я вижу, что текст неверен при чтении. Я предполагаю, что это как-то связано с кодовыми страницами или Unicode, но я не знаю, как это исправить.

DBase ReaderПриложение говорит мне, что DBF находятся в кодовой странице 1252 - я не знаю, если это правильно.Мой инструмент загрузки работает на Win7 с английскими (Великобритания) региональными настройками.

Примеры:

ÅSGARD в DBF становится + SGARD в VB.Net и SQL Server.

RINGHORNE ØSTв DBF становится RINGHORNE ÏST в VB.Net и SQL Server.

Код, который читает DBF:

dbfConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";Extended Properties=dBASE IV"
Cnn.ConnectionString = dbfConnectionString
Cnn.Open()

strSQL = "SELECT * FROM [" & strDBF & "]"
DA = New OleDb.OleDbDataAdapter(strSQL, Cnn)
DS = New DataSet
DA.Fill(DS)

If DS.Tables(0).Rows.Count > 0 Then
  dtDBF = DS.Tables(0)
Else
  dtDBF = Nothing
End If

Данные читаются как: Name = dtDBF.Rows (index) ("NAME_1 ")

Есть ли способ сообщить OleDbDataAdapter, какую кодовую страницу использовать, или лучший способ чтения файлов dBase из VB.Net?

Ответы [ 3 ]

0 голосов
/ 15 марта 2011

Проверьте, содержит ли файл формы информацию о кодовой странице. Есть два места до взгляд

  • Посмотрите на идентификатор драйвера языка (LDID), который находится в заголовке таблицы DBF шейп-файла (в 29-м байте).
  • Найдите связанный отдельный файл с расширением .cpg.

Если кодовая страница не указана в этих местах, по умолчанию используется кодовая страница на ПК, который сгенерировал шейп-файл. Вам просто нужно знать, что: (

Я никогда не использовал его, но, может быть, Shape2SQL позаботится об этом за вас? Или shp2text ? Я полагаю, что Загрузчик шейп-файлов PostGIS обрабатывает кодовые страницы: может быть, вы могли бы импортировать в PostGIS, а затем экспортировать в другой формат ??

0 голосов
/ 11 мая 2014

Старый вопрос, но он может ответить на него для будущих читателей ...

Вы можете попробовать добавить параметр свойства в строку подключения:

Locale Identifier=1044

Это свойство (и списокзначений, включая это), задокументировано для ADO совместно с поставщиком 4.0 OLDB в Jet 4.0, но у меня нет оснований полагать, что он также не поддерживается ADO.Net.Это значение (1044) норвежское / датское.

Не проверено, но есть что-то еще попробовать.

0 голосов
/ 15 марта 2011

Попробуйте добавить это к своему DSN:

CollatingSequence=Norwegian-Danish

Вы также можете использовать:

CollatingSequence=International
...