[英]convert string from Windows 1256 to UTF-8
我想将字符串从具有Windows-1256的数据库转换为UTF-8。 数据库使用波斯语。
我在下面使用了代码,但收到问号:????。
string text= "راوي"; // should be "راوی"
byte[] encoded = Encoding.GetEncoding(1256).GetBytes(text);
string result= Encoding.UTF8.GetString(encoded);
我该如何进行转换?
呈现的代码采用本机.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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.