首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串从Windows 1256转换为UTF-8

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

Stack Overflow用户
提问于 2018-04-19 19:15:54
回答 1查看 2.8K关注 0票数 1

我想将具有Windows1256的数据库中的字符串转换为UTF-8。数据库是波斯文的。

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

代码语言:javascript
复制
string text= "راوي"; // should be "راوی"
byte[] encoded = Encoding.GetEncoding(1256).GetBytes(text);
string result= Encoding.UTF8.GetString(encoded);

我怎样才能进行这种转换?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,例如:

代码语言:javascript
复制
byte[] Win1256Data = ...;
string s = Encoding.GetEncoding(1256).GetString(Win1256Data);
byte[] Utf8Data = Encoding.UTF8.GetBytes(s);

或者,Encoding类有一个Convert()方法来为您处理中间转换:

代码语言:javascript
复制
byte[] Win1256Data = ...;
byte[] Utf8Data = Encoding.Convert(Encoding.GetEncoding(1256), Encoding.UTF8, Win1256Data);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49928613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档