使用UTF-8编码读取XML文件

时间:2016-04-21 09:31:45

标签: c# xml encoding utf-8

我试图读取一个包含立陶宛字符的XML文件。当我试着看它时会显示一些?????代替。我使用sqlbulcopy将xml文件导入数据库。

如何在编码utf-8中读取XML文件?

代码背后

_id

1 个答案:

答案 0 :(得分:2)

文件 Unicode - �是Unicode替换字符。如果文件是ANSI,则会出现 not

使用错误的编码将ANSI源转换为Unicode时,此字符将替换与编码不匹配的任何输入字符。

例如,指定拉丁语(Windows-1252),例如使用File.ReadAllText(somePath, .Encoding.GetEncoding("Windows-1252")),并尝试阅读希腊语文本(1253)将用�替换一些希腊字符。

这意味着创建文件时出现问题。这可能是由各种原因造成的,所有这些都与使用错误的代码页在某些时候将数据视为ANSI有关:

  • 也许源是使用与系统编码不同的单字节编码存储的文件,例如,在系统区域设置为1252的机器上读取使用1253生成的文件。解决方案是要么使用正确编码,或确保文件首先生成为UTF8。
  • 数据可能来自ANSI数据库字段(即varchar),其排序规则与内容不匹配。数据库驱动程序将尝试使用排序规则的代码页转换数据,从而导致错误。这实际上是一个数据库错误。真正的解决方案是将varchar字段替换为nvarchar字段。

可能的解决方法是通过添加Auto Translate=False设置来阻止从数据库加载时的字符转换。本质上,这使用应用程序的CultureInfo读取和转换ANSI数据,而不是字段的排序规则。