我想将具有Windows1256的数据库中的字符串转换为UTF-8。数据库是波斯文的。
我使用了下面的代码,但我收到问号:?
string text= "راوي"; // should be "راوی"
byte[] encoded = Encoding.GetEncoding(1256).GetBytes(text);
string result= Encoding.UTF8.GetString(encoded);我怎样才能进行这种转换?
发布于 2018-04-19 19:50:25
所提供的代码采用本机.NET string (使用UTF-16编码),将其编码到Windows1256,然后错误地将结果解释为UTF-8,而实际上并非如此。因此,当然,UTF-8的解码将为非ASCII字符生成?,因为它们不会被编码为UTF-8。
代码并没有按照问题的要求去做。
将Windows-1256 (或任何其他编码)转换为UTF-8的正确方法是首先将源数据作为- is并使用原始编码将其解码为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);https://stackoverflow.com/questions/49928613
复制相似问题