【问题标题】:UTF-8 to Unicode using C#使用 C# 将 UTF-8 转换为 Unicode
【发布时间】:2011-04-18 05:52:19
【问题描述】:

请帮帮我。我在 GET 请求后编码响应字符串有问题:

var m_refWebClient = new WebClient();
var m_refStream = m_refWebClient.OpenRead(this.m_refUri);
var m_refStreamReader = new StreamReader(this.m_refStream, Encoding.UTF8);
var m_refResponse = m_refStreamReader.ReadToEnd();

调用此代码后,我的字符串 m_refResponse 是 json 源代码,其中包含 \u041c\u043e\u0439 等子字符串。它是什么?如何为西里尔文编码?经过多次尝试,我很累。

更正

【问题讨论】:

  • 您需要提供更多信息 - 例如您期望获得的编码。你有什么理由不只是使用 DownloadString?
  • 如果你用西里尔字母代替Encoding.UTF8(第4行)会怎样?还有 Unicode?​​span>
  • @Jon,谢谢,我可以使用 DownloadString,但结果会一样)
  • @MainMa,我尝试了很多编码组合,我尝试了 Encoding.Convert,但仍然没有)))
  • 如果 DownloadString 的结果相同,这意味着 Web 服务器没有正确地为您提供数据 - 例如,它可能会搞砸 Content-Type 标头。

标签: c# json unicode utf-8 encode


【解决方案1】:

我错过了什么吗?

这是什么?

"\u041c\u043e\u0439"Мой 的字符串文字表示。您无需再做任何事情,字符串是 Unicode,您已经有了西里尔字母。

(除非你的意思是字面意思有序列\u041c\u043e\u0439,即值"\\u041c\\u043e\\u0439"。这不会是编码错误的结果,那会发生在服务器,例如它返回一个 JSON 字符串,因为 JSON 和 C# 使用相同的 \u 转义符。如果发生这种情况,请使用 JSON 解析器。)

【讨论】:

  • 非常感谢!!!这是我的错误,我没有像@Jon 所说的那样提供完整的信息!我的回复是 json 文档,但是在用 Newton 的 json 库解析它之前,我在测试控制台中看了它))))我忘记了格式化,对不起!现在效果很好!!!
【解决方案2】:

对此我不是 100%,但我认为您必须将 Encoding.Unicode 传递给 StreamReader。

【讨论】:

  • Encoding.Unicode 实际上是 UTF-16LE 编码。 (Microsoft 喜欢将 UTF-16LE 描述为“Unicode”,因为这是 Windows 内部用于字符串存储的编码,但命名具有高度误导性。)Web 服务器返回 UTF-非常不寻常。 16 位编码的内容(不兼容 ASCII,如果他们尝试,它往往会破坏很多); UTF-8 的可能性更大。
猜你喜欢
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 2017-04-23
  • 1970-01-01
  • 2015-10-08
  • 2023-03-12
相关资源
最近更新 更多