【发布时间】:2018-09-30 09:38:54
【问题描述】:
我想将具有 Windows-1256 的数据库中的字符串转换为 UTF-8。 数据库是波斯语的。
我使用下面的代码,但收到问号:????。
string text= "راوي"; // should be "راوی"
byte[] encoded = Encoding.GetEncoding(1256).GetBytes(text);
string result= Encoding.UTF8.GetString(encoded);
我该如何进行这种转换?
【问题讨论】:
-
显示用于从数据库中检索 1256 编码值的代码。您的代码示例将无法按预期工作,因为 c# 字符串变量是 utf8 并且将它们强制转换为 1256 会造成乱码。
-
@dlatikay
.NET uses the UTF-16 encoding=> docs.microsoft.com/en-us/dotnet/standard/base-types/… -
正确。我仍然认为我们需要在这里查看数据库代码来提供帮助。一些数据库提供程序在连接属性中有字符编码选项,如果知道我们也在谈论哪个 RDBMS 和驱动程序会很好。
-
您正在解码 Win-1252 字节,就好像它们是 UTF-8 一样。这是完全错误的,可能与您想要做的相反。 .Net 中的字符串是字符串对象;它们的内部编码无关紧要。仅当出于某种原因要将它们转换为字节时,编码才重要。
-
我编写了一个 C 程序,将文件从 windows-1256 逐字节转换为 UTF-8。您可以使用任何语言编写相同的程序。在这里查看:github.com/mutawa/win2utf