是什麼編碼

形如——
&#dddd;
&#xhhhh;
&#name;
——的一串字符是 HTML、XML 等 SGML 類語言的轉義序列(escape sequence)。它們不是「編碼」。

以 HTML 爲例,這三種轉義序列都稱作 character reference:
  • 前兩種是 numeric character reference(NCR),數字取值爲目標字符的 Unicode code point;以「&#」開頭的後接十進制數字,以「&#x」開頭的後接十六進制數字。
  • 後一種是 character entity reference,後接預先定義的 entity 名稱,而 entity 聲明瞭自身指代的字符。
從 HTML 4 開始,NCR 以 Unicode 爲準,與文檔編碼無關。

「中國」二字分別是 Unicode 字符 U+4E2D 和 U+56FD,十六進制表示的 code point 數值「4E2D」和「56FD」就是十進制的「20013」和「22269」。所以——
中国
中国

——這兩種 NCR 寫法都會在顯示時轉換爲「中國」二字。

NCR 可以用於轉義任何 Unicode 字符,而 character entity reference 很受限,參見 HTML 4 和 HTML5 中已有定義的字符列表:


HtmlEncoder,中文轉換成&#開頭的編碼(及HTML特殊字符解碼)


如題: HtmlEncoder,中文轉換成&#開頭的編碼(及HTML特殊字符解碼)
 代碼如下:

  1. package test.com.gjob.services;
  2. import java.io.IOException;
  3. import java.io.Writer;
  4. public class HtmlEncoder {
  5.      public static void main(String args[]){
  6.          System.out.println(HtmlEncoder.encode("你好"));
  7.      }
  8.      
  9.      /***
  10.     
  11. }

http://www.blogjava.net/jerry-zhaoj/archive/2009/03/24/261730.html


HTML,Unicode與NCR(數字字符引用)


標籤: htmlNCRNumeric Character ReferenceUnicode

昨天ihipop問的一個問題,下面是什麼編碼?

telecomadmin+8位数字

根據常識判斷,&#後面的數字應該是Unicode編碼值,寫個VBS驗證:

MsgBox ChrW(20301)&ChrW(25968)&ChrW(23383)

輸出“位數字”,連起來就是“telecomadmin+8位數字”,讀起來挺通順的,看來是Unicode沒錯了。

Google了一下,這東西專業名稱叫numeric character reference(NCR),直譯就是數字字符引用。一個Numeric Character Reference編碼是由一個與號(&)跟着一個井號(#),然後跟着這個字符的Unicode編碼值,最後跟着一個分號組成的,就像上面的例子一樣。

有了數字字符引用,就可以在網頁中顯示Unicode字符了,不用考慮html文件本身的編碼,因爲數字字符引用只用到ASCII字符集裏的字符。所以,即使在gb2312編碼的網頁中,也可以用NCR顯示埃及的象形文字了。

這篇文章發佈於 2011年04月9日,星期六,21:43,歸類於 程序設計。 您可以跟蹤這篇文章的評論通過 RSS 2.0 feed。 您可以留下評論,或者從您的站點trackback

http://demon.tw/programming/numeric-character-reference.html


[字符編碼]Numeric Character Reference和HTML Entities


   你是否在dreamweaver裏編輯網頁的時候看到Σ這樣的東西,你曾使用過 這樣的玩意吧,或者你在調試webservice的時候看到返回xml字符串中現γ這樣的怪物呢?你看不懂他們可能用瀏覽器或者DW預覽一下都是可以看到廬山真面目的,它是誰?

    Σ這個是 Numeric Character Reference

     這個是Character entities references

從字面上觀察,一個是用&#x+16進制+; 表達信息,一個是用&+字符串+;    突然讓我想起了彙編語言裏頭的 助記符 跟 實際二進制指令代碼,帶着這個猜測往下看吧!

 Character entities references

HTML 中規定了 Character entity references,也就是通常我們說得 html實體字符,一些字符在 HTML 中擁有特殊的含義,比如小於號 (<) 用於定義 HTML 標籤的開始。如果我們希望瀏覽器正確地顯示這些字符,我們必須在 HTML 源碼中插入字符實體。

字符實體有三部分:一個和號 (&),一個實體名稱,或者 # 和一個實體編號,以及一個分號 (;)。要在 HTML 文檔中顯示小於號,我們需要這樣寫:&lt; 或者 &#60;

並不是所有的瀏覽器都支持最新的實體名稱,不同的瀏覽器中需要去驗證哪些可以被識別哪些不能被識別,下圖中的“撇號”在IE下就不能支持,對於不支持的實體名稱可以用另外的方式解決,繼續閱讀下一段吧。

注意:實體對大小寫敏感。


比較全面的列表請參看:這裏

參考:http://www.w3school.com.cn/html/html_entities.asp

Numeric Character Reference

看看維基百科的解釋:

A numeric character reference (NCR) is a common markup construct used in SGML and other SGML-related markup languages such as HTML and XML. It consists of a short sequence of characters that, in turn, represent a single character from the Universal Charact

NCR是一種常見的標記結構,用於SGML和其他SGML相似的標記語言,如HTML和XML。它由一個短的字符序列組成,代表一個字符(全球的文字字符)。

NCR編碼是由一個與號(&)跟着一個井號(#), 然後跟着這個字符的Unicode編碼值, 最後跟着一個分號組成的, 如:

    &#nnnn;
或者
&#xhhhh
其中, nnnn是字符編碼的十進制表示, 而hhhh是字符的16進製表示.

另外要注意的是x在xml中必須是小寫的.而hhhh可以大小寫混用, 另外nnnn和hhhh也可以有前導零.

HTML Entites與NCR不同, HTML字符實體的名字必須是在HTML中已經定義的才能被使用,比如:

    &amp; //&
&nbsp; //空格

如果是XML的話,必須在DTD中定義過, 類似:
1     <!ENTITY nbsp CDATA "&#160;" -- no-break space = non-breaking space,
2 U+00A0 ISOnum -->
3 <!ENTITY iexcl CDATA "&#161;" -- inverted exclamation mark, U+00A1 ISOnum -->
4 <!ENTITY cent CDATA "&#162;" -- cent sign, U+00A2 ISOnum -->
5 <!ENTITY pound CDATA "&#163;" -- pound sign, U+00A3 ISOnum -->
6 <!ENTITY curren CDATA "&#164;" -- currency sign, U+00A4 ISOnum -->
7 <!ENTITY yen CDATA "&#165;" -- yen sign = yuan sign, U+00A5 ISOnum -->
8 <!ENTITY brvbar CDATA "&#166;" -- broken bar = broken vertical bar,
9 U+00A6 ISOnum -->

其中, 名字是大小寫敏感的. 比如:

    &Aring; // Å
而:
&aring; //

到此,我們來回答一下上面提出的問題,在html中沒有規定的字符實體名稱或不被瀏覽器支持的一些實體,怎麼辦呢?

答:可以使用NCR的方式,先找到字符對應的UNICODE編碼,以小於號爲例,unicode編碼16進製爲3C(10進製爲60),在html則可以使用&#x3C或&#60,跟上面的表格對照看是否相同,由此我們也可以知道,如果我們的html所採用的編碼不支持一些字符(比如其他國家的字符),則可以通過NCR來引入我們的頁面就不會亂碼了

      有一天,我的一個好朋友在調試webservice時發現對方的接口返回類似&#xhhhh這樣的東西,一時不知道如何處理,如何轉換爲我們想要的編碼呢?下一篇文章將提供通用的轉換程序,敬請期待!

     最後感謝網絡上無名的作者,是你們的博文讓我學得更多,謝謝!如不小心引入您的博文內容而未帶上出處,請告知我一聲。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章