2012-08-22 51 views
2

參照此問題的接受的答案:ASP.NET - What Characters does Server.HtmlEncode Encode into Named Character Entities爲什麼ASP.NET MVC實體編碼所有8位字符> ansi 127?

這裏引用了HtmlEncode的源代碼。我必須如下的問題:其實體編碼表示(&#<ansicode>)

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

基本上,這個轉換所有字符從&nbsp;(ASCII碼127)到Y(ANSI CODE 255)。

儘管ansi代碼大於255的所有字符只是按原樣寫入輸出。

有沒有人知道ANSI 127 - 255編碼的基本原理?它看起來有點傻有一個網頁,在UTF-8,在源代碼看起來像

"S&#248k:" 

,而不是

"Søk:" 

(「SOK」是挪威的「搜索」)。

+0

「不要在屏幕後面看起來很傻」並不是HTML編碼試圖解決的問題 - 這是爲了明確表示內容。只有「擴展ascii」的範圍是模糊的;高於255 *的字符碼完全不是* ascii。 –

+0

我不明白爲什麼會提到ASCII。這裏沒有什麼是ASCII:C#字符串是Unicode,HtmlEncode在這些Unicode字符串上工作。 – Codo

+0

@Codo:ANSI可能更正確,但8位ASCII是一個廣泛使用的術語,雖然在技術上不是100%正確的。我編輯了原始問題。我當然在談論8位字符集,例如iso8859-1(aka latin-1)等。 –

回答

1

ASCII,參見http://en.wikipedia.org/wiki/Ascii,僅定義0到127之間的值;這是7位而不是8位(一個字節)。它們是HTML編碼,以避免發送非法ASCII(最重要的位)字符。

當發送UTF-8(這是Web的事實編碼)時,非ASCII字符(0xA0 - 0xFF)用於指定多字節字符。所以爲了避免衝突,他們使用了一個命名的字符串。

至少,這就是我會做的。

+0

「擴展ascii」/ ansi 8位字符集的高127個字符(使用第8位)非常好定義在例如ISO8859-1。並且,在unicode中,由於Unicode和Latin-1/iso8859-1中的字符127-255是相同的,因此您不必使用數字對它們進行實體編碼... –

相關問題