为什么ASP.NET MVC实体编码所有8位字符> ansi 127?

时间:2012-08-22 11:14:32

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

参考此问题的接受答案: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(';');
  }

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

但是,ansi代码大于255的所有字符都只是按原样写入输出。

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

"S&#248k:"

而不是

"Søk:"

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

1 个答案:

答案 0 :(得分:1)

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

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

至少,这就是我要做的。