【问题标题】:Why does ASP.NET MVC entity-encode all 8-bit characters > ansi 127?为什么 ASP.NET MVC 实体编码所有 8 位字符 > ansi 127?
【发布时间】:2012-09-07 05:04:20
【问题描述】:

参考这个问题的公认答案:ASP.NET - What Characters does Server.HtmlEncode Encode into Named Character Entities

这里引用了HtmlEncode的源码。我对以下几行有疑问:

  if ((ch >= '\x00a0') && (ch < 'Ā'))
  {
      output.Write("&#");
      output.Write(ch.ToString(NumberFormatInfo.InvariantInfo));
      output.Write(';');
  }

基本上,这会将所有字符从&amp;nbsp;(ASCII 代码 127)转换为 ÿ(ANSI 代码 255)到其实体编码表示 ()。

不过,所有 ansi 代码高于 255 的字符都按原样写入输出。

有人知道这种 ANSI 127 - 255 编码背后的原理吗?有一个网页看起来有点傻,在 utf-8 中,源代码看起来像

"S&#248k:"

而不是

"Søk:"

(“Søk”是挪威语的“搜索”)。

【问题讨论】:

  • “在幕后看起来不傻”不是 HTML 编码试图解决的问题 - 它是为了明确表示内容。只有“扩展 ascii”的范围不明确; 255 以上的字符代码 根本不是 ascii。
  • 我完全不明白为什么提到 ASCII。这里没有 ASCII:C# 字符串是 Unicode,而 HtmlEncode 适用于这些 Unicode 字符串。
  • @Codo:ANSI 可能更正确,但 8 位 ASCII 是一个广泛使用的术语,尽管在技术上不是 100% 正确。我编辑了原始问题。我当然是在谈论 8 位字符集,例如 iso8859-1(又名 latin-1)等。
  • @Dan Puzey, "extended ascii", or ansi, 或任何我们想称呼它们的东西,如果你用 http/html 响应发送正确的字符编码,例如:Content-Type :文本/html; charset=ISO-8859-1
  • @ErikA.Brandstadmoen:好点,虽然问题确实特别提到了“utf-8 中的网页”。

标签: c# asp.net-mvc html-encode


【解决方案1】:

ASCII,见http://en.wikipedia.org/wiki/Ascii,只定义了0到127之间的值;这是 7 位而不是 8 位(一个字节)。它们是 HTML 编码,以避免发送非法 ASCII(最高有效位)字符。

当发送UTF-8(这是网络事实上的编码)时,非 ASCII 字符 (0xA0 - 0xFF) 用于指定多字节字符。所以为了避免冲突,他们使用了一个命名字符串。

至少,我会这样做。

【讨论】:

  • “扩展 ascii”/ansi 8 位字符集的高 127 个字符(使用第 8 位)在例如ISO8859-1。而且,在 unicode 中,因为字符 127-255 在 Unicode 和 Latin-1/iso8859-1 中是相同的,所以你不必用数字对它们进行实体编码......
猜你喜欢
  • 1970-01-01
  • 2012-01-11
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 2012-06-14
  • 2017-04-27
  • 2016-07-05
相关资源
最近更新 更多