【问题标题】:ASP.NET Web API content encodingASP.NET Web API 内容编码
【发布时间】:2014-02-22 17:09:48
【问题描述】:

我创建了一个 API.NET Web API。它使用默认的 utf-8 内容编码。我需要输出为 latin-1 以匹配数据库。

【问题讨论】:

  • 如果你的输出编码需要匹配你的数据库编码,你可能做错了...joelonsoftware.com/articles/Unicode.html
  • 你能详细说明我应该怎么做吗?我的数据库使用 Latin-1 编码,然后来自该数据库的字符显示在 utf-8 的网页上(默认情况下),所以我想将页面设置为 Latin 1,以便正确显示字符。
  • 您是否从数据库中提取数据作为原始字节数组并将其直接发送到您的输出?如果您使用的 DB 库将来自 DB 的文本类型处理为 .net 字符串,则这些应该像库中的所有其他 .net 字符串一样转换为 UCS-2,并且您的数据库编码应该是无关紧要的。
  • 你能给我一个例子,说明什么时候可以在数据库中使用 utf-8 并在呈现的网页上使用不同的编码类型?
  • 在这里同意乔纳斯。渲染的“输出”进入浏览器,然后从 .net 的 Unicode 字符串编码为内容协商产生的任何内容。如果 a)您的数据在数据库中看起来不错,b)在 latin1 上看起来很糟糕浏览器和c)您确定所有数据库字符实际上都可以翻译成latin1,问题出在您的数据库访问权限上。您可以通过在单步执行控制器操作时查看调试器中的 .net 字符串来检查这一点。如果它们是垃圾,asp.net 对此无能为力。

标签: asp.net web-services asp.net-web-api content-type content-encoding


【解决方案1】:

这里有一篇文章展示了如何做到这一点http://blogs.msdn.com/b/henrikn/archive/2012/04/22/asp-net-web-api-content-negotiation-and-accept-charset.aspx

您只需从本文更改以删除所有支持的编码并仅包含 latin-1

在你的应用启动中这样的东西

   protected void Application_Start()
   {

       Encoding latinEncoding = Encoding.GetEncoding("Latin-1");
       GlobalConfiguration.Configuration.Formatters.JsonFormatter.SupportedEncodings.Add(latinEncoding);
       GlobalConfiguration.Configuration.Formatters.JsonFormatter.SupportedEncodings.RemoveAt(0);

   } 

并添加以下命名空间:

using System.Text;

【讨论】:

  • JsonFormatter 为空,我得到一个运行时异常,试图添加到其支持的编码中。有什么想法吗?
猜你喜欢
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
  • 2014-07-07
  • 2015-11-18
  • 2023-03-22
  • 2013-02-21
  • 2013-03-08
  • 1970-01-01
相关资源
最近更新 更多