C#:如何更改字符串编码?

3

我遇到了一个字符串编码的问题。

在一个邮件发送WS中,我接收到一个坏的字符串,其中包含“�”,而不是“é”(至少在Visual Studio的Debug模式下看到的是这样)。 该字符来自于一些JSON,在进入我的DTO时进行反序列化。

更改JSON的Content-Type并不能解决这个问题。 所以我想自己更改字符串的编码,因为JSON编码似乎是VS反序列化问题(如果你们中有人想看一下,我在这里开了一个线程here)。

我尝试过:

Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding defaultEncoding = Encoding.Default;
byte[] bytes = defaultEncoding.GetBytes(messedUpString);
byte[] isoBytes = Encoding.Convert(defaultEncoding, iso, bytes);
cleanString = iso.GetString(isoBytes);

或者:
byte[] bytes = Encoding.Default.GetBytes(messedUpString);
cleanString = Encoding.UTF8.GetString(bytes);

这并不是很有效... 我摆脱了那个 "�" 字符,这是好的一部分,但是我在 cleanString 中收到的是 "?" 而不是预期的 "é",这并不是很好,或者至少不是预期的行为。


8
如果你的数据已经是一个字符串,那么现在想要修复它就太晚了。你需要在第一次将数据从字节转换为字符串时使用正确的编码。 - Matti Virkkunen
@MattiVirkkunen 我无法更改这个。这是一个MVC2方法控制器,反序列化功能是框架的一部分。这意味着我无法做任何事情来解决这个问题? - Gaëtan
2
好的,你必须更改它,因为没有其他方法可以修复它。你可以在ASP.NET中配置输入编码,它应该也能够从头部检测到它。作为最后的手段,你总是可以将请求正文作为二进制读取并自己解码。 - Matti Virkkunen
1个回答

1
事实上,我的应用程序一切正常。我使用SOAPUI进行测试,并发现这是我的错误。我下载了一些浏览器的rest插件,从那里尝试,一切都正常工作。感谢@MattiVirkkunen的帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接