将字符串从Windows 1256转换为UTF-8

时间:2018-04-19 19:15:54

标签: c# winforms unicode

我想将字符串从具有Windows-1256的数据库转换为UTF-8。 数据库是波斯语。

我使用下面的代码,但我收到问号:????。

string text= "راوي"; // should be "راوی"
byte[] encoded = Encoding.GetEncoding(1256).GetBytes(text);
string result= Encoding.UTF8.GetString(encoded);

我该如何进行转换?

1 个答案:

答案 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);