【问题标题】:Cannot display the correct encoding无法显示正确的编码
【发布时间】:2021-09-17 22:32:24
【问题描述】:
using (WebClient client = new WebClient())
{
        client.Encoding = Encoding.UTF8;
        string v=client.DownloadString("https://feed.mix.sina.com.cn/api/roll/get?pageid=155&lid=1686&num=1&page=1&callback=feedCardJsonpCallback&_=" + DateTime.Now.ToString("HHmmss"));
        string v1=Regex.Split(v, ",\"title\":\"")[1].Split('\"')[0];
        Encoding utf8 = Encoding.UTF8;
        Encoding window1252 = Encoding.Default;
        byte[] postBytes = window1252.GetBytes(v1);
        string decodedText = utf8.GetString(postBytes);
        MessageBox.Show(decodedText);
}

v1 应该是这样的: "\u8428\u5c14\u74e6\u591a\u7387\u5148\u201c\u5403\u8783\u87f9\u201d \u6bd4\u7279\u5e01\u5c06\u5f00\u542f\u62c9\u7f8e \u201c\u540e\u7f8e\u5143\u65f6\u4ee3\u201d\uff1f"

我想把它转换成可读的汉字,但我一直没有这样做

【问题讨论】:

  • 我会强烈建议您从下载原始字节开始,而不是将其下载为“错误”编码的字符串,然后尝试更正它。这几乎总是导致数据丢失/损坏。
  • 不要转换任何东西。 .NET 字符串是 Unicode,它们不需要任何转换。 Windows 是 Unicode 操作系统,这意味着 Windows 字符串也是 Unicode,除非您使用 ASCII Win32 API。你所做的只能破坏文本
  • (如果可以的话,我还建议您迁移到 HttpClient...)
  • 顺便说一句,实际内容是什么?那个正则表达式是可疑的。使用正则表达式解析 JSON 字符串最终只会破坏文本,并且肯定会破坏任何使用转义序列的 JSON 文本。像 JSON.NET 或 System.Text.Json 这样的 JSON 反序列化器会返回正确的 Unicode 字符串
  • 您正在下载一个包含转义 Unicode 的字符串,您需要取消转义它而不是做任何与文本编码相关的事情,请参见此方法:例如 stackoverflow.com/a/9738396/246342。正如评论的 JSON 解析器可能会自动为您执行此操作。

标签: c# unicode


【解决方案1】:

string r1=Regex.Unescape(v1);

解决了!感谢大家,尤其是 Alex K。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 2023-03-04
    • 2011-07-19
    • 2011-09-19
    • 1970-01-01
    相关资源
    最近更新 更多