首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换MySQL非unicode字符在C#中

问转换MySQL非unicode字符在C#中
EN

Stack Overflow用户
提问于 2022-01-15 21:14:09
回答 1查看 59关注 0票数 1

我有一个PHP应用程序,它目前以非常规格式将数据存储在MySQL表中(我假设这是因为它使用的是非unicode mysql连接)。

例如,这是PHP应用程序UI中所示的客户名称之一:

迪洛里奥汽车修理店

注意,它和下面的撇号有区别。

迪洛里奥汽车修理店

后者使用一个标准的拉丁字母撇号作为对照unicode(我猜)风格。

此名称存储在DB表中,如下所示:

迪洛里奥欧式™S汽车车身车间

当从DB中提取数据并在UI中显示时,这一切看起来都是正确的,但是当我开始使用MYSQL.Data C#连接器来提取相同的数据时,问题就出现了。

一开始,我认为我应该能够直接转换值字节数组,然后将其转换为latin1 (我假设这是PHP的默认值),但是现有的编码似乎都没有给我带来我想要的结果,这就是我得到的结果:

​

​

这是mysql中字段的DB排序规则,以及它的外观:

​

理想情况下,我希望摆脱DB中所有损坏的数据,并修复到unicode的PHP连接。但是在这一点上,最好能像PHP一样阅读已经在里面的内容。

我也尝试过在所有不同的组合中进行编码转换,但在这里也没有运气:

​

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-16 16:04:15

文本是用Windows-1252编码的,而不是用Latin1编码的,这就是为什么您在上面对其进行解码的尝试失败的原因。一旦将字符串转换为Windows1252字节,然后使用UTF-8对其进行解码,则应该具有正确的值:

代码语言:javascript
复制
// note: on .NET 6.0, add 'System.Text.Encoding.CodePages' and call this line of code:
// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

var windows1252 = Encoding.GetEncoding(1252);
var utf8Bytes = windows1252.GetBytes("DILORIO’S AUTO BODY SHOP");
var correct = Encoding.UTF8.GetString(utf8Bytes);
// correct == "DILORIO’S AUTO BODY SHOP"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70725498

复制
相关文章

相似问题

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