gpt4 book ai didi

c# - .NET 3.5 C# StreamReader 读取 ISO-8859-1 字符不正确

转载 作者:太空宇宙 更新时间:2023-11-03 11:28:51 27 4
gpt4 key购买 nike

总而言之,我检索了一个 HTTP Web 响应,其中包含 JSON 格式的数据,这些数据具有 unicode 字符,例如“\u00c3\u00b1”,应该转换为“ñ”。相反,我正在使用的 JSON 解析器将这些字符转换为“ñ”。我正在寻找的行为是将这些字符翻译成“ñ”。

获取以下代码并执行它...

string nWithAccent = "\u00c3\u00b1";

Encoding iso = Encoding.GetEncoding("iso8859-1");
byte[] isoBytes = iso.GetBytes(nWithAccent);

nWithAccent = Encoding.UTF8.GetString(isoBytes);

nWithAccent 输出“ñ”。这是我正在寻找的结果。我采用了上面的代码并将其用于下面的“response_body”变量,该变量包含与上面相同的字符(从我使用 Visual Studio 2008 文本分析器可以看到的)并且没有得到相同的结果......它没有做任何事情字符“\u00c3\u00b1”。

在我的应用程序中,我针对以 JSON 格式检索数据的外部系统执行以下代码。在 Visual Studio 中使用文本分析器检查“response_body”变量后,我看到“\u00c3\u00b1”而不是 ñ。例如。 “niño”一词在文本分析器中将被视为“ni\u00c3\u00b1o”。

using (HttpWResponse = (HttpWebResponse)this.HttpWRequest.GetResponse())
{
using (StreamReader reader = new StreamReader(HttpWResponse.GetResponseStream(), Encoding.UTF8))
{
// token will expire 60 min from now.
this.TimeTillTokenExpiration = DateTime.Now.AddMinutes(60);

// read response data
response_body = reader.ReadToEnd();
}
}

然后我使用开源 JSON 解析器,它将“\u00c3”替换为“Ô,将“\u00b1”替换为“±”,最终结果为“ñ”而不是“ñ”。 JSON 解析器有问题还是我对响应流应用了错误的编码?响应中的 header 指示字符集为 UTF-8。感谢您的任何回复!

最佳答案

您收到的 JSON 响应无效。 "\u00c3\u00b1" 不是 ñ 的正确编码。

相反,它是一种双重编码。它首先被编码为一个 UTF-8 字节序列,然后 128 以上的字节被转义为 \u 序列。

由于 JSON 响应通常是 UTF-8,因此无需转义 ñ 的两个字节序列。如果使用转义,则不得将其应用于两个字节序列,而是应用于单个 Unicode 字符本身。然后它会产生 "\u00f1"

您可以通过粘贴以下 JSON 数据使用在线 JSON 验证器(例如 JSONLintJSON Format)对其进行测试:

{
"unescaped": "ñ",
"escaped": "\u00f1",
"wrong": "\u00c3\u00b1"
}

关于c# - .NET 3.5 C# StreamReader 读取 ISO-8859-1 字符不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8485195/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com