【问题标题】:JSON feed in UTF-8 without byte order marker不带字节顺序标记的 UTF-8 格式的 JSON 提要
【发布时间】:2013-03-23 22:03:56
【问题描述】:

我有一个用 C# 编写的 WCF 应用程序,它以 JSON 或 XML 格式提供我的数据,具体取决于用户在查询字符串中的要求。这是我提供数据的代码的快速 sn-p:

Encoding utf8 = new System.Text.UTF8Encoding(false);
return WebOperationContext.Current.CreateTextResponse(data, "application/json", utf8);

当我使用上述方法传递数据时,特殊字符都被弄乱了。所以查韦斯看起来像查韦斯。另一方面,如果我使用 BOM 创建上面的 utf8 变量或使用枚举 (Encoding.UTF8),则特殊字符可以正常工作。但是,我的一些消费者抱怨他们的代码在使用我的 API 时抛出异常。这当然是因为提要中的 BOM。有没有办法让我在提要中正确显示没有 BOM 的特殊字符?

【问题讨论】:

  • 你试过内容类型application/json; charset=utf-8而不是application/json吗?
  • json 的唯一合法编码是 UTF-8/16/32,而 UTF-8 是事实上的标准

标签: json wcf api encoding byte-order-mark


【解决方案1】:

看起来输出是正确的,但无论您使用什么来显示它都需要 ANSI 编码的文本。 Chávez 是您将 Chávez 编码为 UTF-8 并将结果解释为拉丁文 1 时得到的结果。

【讨论】:

  • 我只是在浏览器中查看它,而设备则希望它以 UTF8 格式显示。如果我只得到 Chávez 那么为什么在添加 BOM 时它会正确显示。谢谢。
  • 网络浏览器?您必须发送适当的内容类型标头,例如 Content-Type: text/xml; charset=utf-8 以使其以 UTF-8 解释文档。当您发送 BOM 时,您可能会触发浏览器的自动编码检测算法。
  • 出于某种原因,我期待 CreateTextResponse 方法使用编码类型来添加内容类型标头。在这种情况下,我必须在 contentType 参数中指定它是 utf-8。添加完整的内容类型后,我能够得到正确的结果。
猜你喜欢
  • 2011-07-13
  • 1970-01-01
  • 2016-02-04
  • 2020-05-29
  • 1970-01-01
  • 2012-04-17
  • 2021-01-26
相关资源
最近更新 更多