1

我有一个工具可以读取 dBase 文件并将内容上传到 SQL Server,这是导入 shapefile 系统的一部分。它可以工作,但现在我们需要导入包含非英语字符的文件(在这种情况下是挪威语,以后可能是其他语言)并且它们已被损坏。

正在使用 OleDbDataAdapter 读取 dBase 文件。单步执行代码,我可以看到文本在读入时是错误的。我假设它与代码页或 Unicode 有关,但我不知道如何修复它。

一个 dBase Reader 应用程序告诉我 DBF 在代码页 1252 中——我不知道这是否正确。我的上传工具在 Win7 上运行,具有英语(英国)区域设置。

例子:

DBF 中的 ÅSGARD 在 VB.Net 和 SQL Server 中变为 +SGARD。

DBF 中的 RINGHORNE ØST 在 VB.Net 和 SQL Server 中变为 RINGHORNE ÏST。

读取 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 使用哪个代码页,或者有更好的方法从 VB.Net 读取 dBase 文件?

4

3 回答 3

0

尝试将此添加到您的 DSN:

CollatingSequence=Norwegian-Danish

您也许还可以使用:

CollatingSequence=International
于 2011-03-15T17:21:06.483 回答
0

检查 shapefile 是否包含代码页信息。有两个地方可以

  • 查看语言驱动程序 ID (LDID),它位于 shapefile 的 DBF 表的标题中(在第 29 个字节中)。
  • 查找扩展名为.cpg.

如果未在这些位置指定代码页,则默认为生成 shapefile 的 PC 上的代码页。你只需要知道:(

我从未使用过它,但也许Shape2SQL会为您处理这个问题?还是shp2text?我相信PostGIS shapefile 加载器会处理代码页:也许您可以导入 PostGIS,然后以另一种格式导出?

于 2011-03-15T17:25:15.847 回答
0

老问题,但这可能会为未来的读者回答......

您可以尝试在连接字符串中添加属性设置:

Locale Identifier=1044

此属性(以及包括此属性的值列表)与 Jet 4.0 的 OLDB Provider 一起记录在 ADO 中,但我没有理由相信 ADO.Net 也不支持它。此值 ( 1044) 是挪威语/丹麦语。

未经测试,但可以尝试其他方法。

于 2014-05-11T03:46:07.003 回答