我想将字符串从具有Windows-1256的数据库转换为UTF-8。 数据库是波斯语。
我使用下面的代码,但我收到问号:????。
string text= "راوي"; // should be "راوی"
byte[] encoded = Encoding.GetEncoding(1256).GetBytes(text);
string result= Encoding.UTF8.GetString(encoded);
我该如何进行转换?
答案 0 :(得分:3)
显示的代码采用本机.NET string
(使用UTF-16编码),将其编码为Windows-1256,然后误解结果为UTF- 8当它真的不是。因此,当然UTF-8的解码将为非ASCII字符产生?
,因为它们不会被编码为UTF-8开始。
代码没有按照问题要求进行。
将Windows-1256(或任何其他编码)转换为UTF-8的正确方法是首先按原样获取源数据,并使用原始编码将其解码为UTF-16,然后将结果编码为UTF-8,例如:
byte[] Win1256Data = ...;
string s = Encoding.GetEncoding(1256).GetString(Win1256Data);
byte[] Utf8Data = Encoding.UTF8.GetBytes(s);
或者,Encoding
类有一个Convert()
方法来处理中间转换:
byte[] Win1256Data = ...;
byte[] Utf8Data = Encoding.Convert(Encoding.GetEncoding(1256), Encoding.UTF8, Win1256Data);