【发布时间】: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 解析器可能会自动为您执行此操作。