繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM