使用非英文字符读取dBase DBF时出现问题

时间:2011-03-15 13:06:11

标签: vb.net shapefile dbase

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

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

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

示例:

DBF中的ÅSGARD在VB.Net& SQL Server。

DBF中的RINGHORNEØST在VB.Net中成为RINGHORNEÏST 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

数据读取如下:名称= dtDBF.Rows(索引)(“NAME_1”)

有没有办法告诉OleDbDataAdapter使用什么代码页或从VB.Net读取dBase文件的更好方法?

3 个答案:

答案 0 :(得分:0)

尝试将此添加到您的DSN:

CollatingSequence=Norwegian-Danish

您也可以使用:

CollatingSequence=International

答案 1 :(得分:0)

检查shapefile是否包含代码页信息。有two placeslook

  • 查看language driver ID(LDID),它位于shapefile的DBF表的标题中(在第29个字节中)。
  • 查找扩展名为.cpg的相关单独文件。

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

我从未使用它,但也许Shape2SQL可以为你解决这个问题?还是shp2text?我相信PostGIS shapefile loader处理代码页:也许你可以导入到PostGIS中,然后以另一种格式导出?

答案 2 :(得分:0)

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

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

Locale Identifier=1044

ADO与Jet 4.0的OLDB提供程序一起记录了此属性(以及包含此属性的值列表),但我没有理由相信它也不受ADO.Net的支持。 。该值(1044)是挪威语/丹麦语。

未经测试,但还有其他尝试。