心得2
定義:(參考條目:http://note.youdao.com/noteshare?id=7626ba13a42457cb2fed6b52dda0c112&sub=D039D1F4175E4FA9A1411F6E88024D05)
- Unicode( 統(tǒng)一碼、萬國碼、單一碼)是計算機科學領域里的一項業(yè)界標準,包括字符集、編碼方案等。Unicode 是為了解決傳統(tǒng)的字符編碼方案的局限而產(chǎn)生的,它為每種語言中的每個字符設定了統(tǒng)一并且唯一的 二進制編碼,以滿足跨語言、跨平臺進行文本轉(zhuǎn)換、處理的要求。

字符與編碼 Characters and Encoding
- 將人類自然語言的書寫文字符號轉(zhuǎn)換成數(shù)字機器能處理的“0”和“1”需要編碼(Encoding)。
把語言的字符集成,制定出字符集(CharacterSets)通常是國家政府或產(chǎn)業(yè)界制定出來的,著名的例子如中國的國家標準GB-2312丶繁體/正體字早期的業(yè)界標準Big5丶香港政府制定的香港增補字符集 HKSCS等等。
由於各種字符集的標準不一,若有沖突的編碼定義則不同語言文字符號無法在同一文件中出現(xiàn),需要額外做轉(zhuǎn)換。如中文簡體字早期標準GB-2312和繁體/正體字早期標準Big5是不相容的,不但需要額外轉(zhuǎn)換,這兩種標準的文字是無法同時出現(xiàn)在一份文件里。
此外,由於編碼之間的相容性及應用程序如瀏覽器的支援不一,會發(fā)生編碼錯誤以致顯示內(nèi)容不正確,又稱亂碼(Mojibake),或甚致是安全漏洞。
Unicode標準與世界語言
- Unicode標準所支援的世界書寫語言詳列於官方網(wǎng)站之Supported Scripts頁面,中日韓共用的漢字(Han)早在1993年第1.1版已納入。
由於字符數(shù)及編碼的特性,由Mark Davis所做的統(tǒng)計來看,Unicode標準中字符數(shù)占最多的是中國,占了7成以上,韓國次之占1成多。

Unicode CLDR數(shù)據(jù)庫存有不少數(shù)據(jù),可以使用XML或JSON格式取用,用於網(wǎng)站/軟件的在地化(L10N, Localiation)及全球化(i18n, Internationalization)。
此外,CLDR亦有地域-語言表,Territory Language Information,詳列Unicode 用戶貢獻但經(jīng)專家審批的各地域之語言人口側(cè)寫。
Unicode標準統(tǒng)一編碼的基礎設施
- 為解決編碼交換等問題,為所有文本(在互聯(lián)網(wǎng)和所有設備上)提供了基礎設施。這基礎設施的工作包括兩部分:
其一為為文本中使用的每個字符提供一個數(shù)字,而Unicode標準是這些數(shù)字的字典。
其二是協(xié)助設備處理世界上所有的語言,因而聯(lián)盟維護一大數(shù)據(jù)庫,為不同的語言和國家提供的術語和格式 (Unicode, 2017)。此數(shù)據(jù)庫名叫CLDR (Common Locale Data Repository),中譯為「通用區(qū)域資料庫」
unicode格式
- Unicode是一種可能的寬字符集。由 Unicode 協(xié)會開發(fā)的能表示幾乎世界上所有書寫語言的字符編碼標準。Unicode 字符清單有多種代表形式,包括 UTF-8、UTF-16 和 UTF-32。大多 Windows 界面使用 UTF-16。
Unicode 傳輸格式 8 (UTF-8)
在 ASCII 碼基礎上發(fā)展的協(xié)議字符設置。UTF-8 協(xié)議提供 ASCII 碼的擴展支持,UCS-2 碼的翻譯,國際 16 進制 Unicode 編碼字符設置。與使用字符數(shù)據(jù)的 ASCII 或擴展 ASCII 編碼相比,UTF-8 可獲得更大范圍的名稱。
- Unicode 字符系統(tǒng) (UCS)
作為 Unicode 標準一部分的國際標準字符集參考?,F(xiàn)在廣泛使用的 UCS 標準的版本是 UCS-2,該版本指定的 16 位字符數(shù)值已作為世界上大多數(shù)語言的編碼標準而被接受,并得到了承認。
直接選unicode就可以了。
如果沒有特殊字符,ansi保存也沒事。
Unicode 的常見表達形式
- 一般而言,Unicode編碼的書寫表達形式以U+開頭,接16進制符,如Unicode的笑臉??:
U+1F600
Unicode列表時如Unicode 5.0的全部表情符號都采取這種編碼書寫方式
URL在編碼時,會把非ASCII字符及一些保留字符做轉(zhuǎn)換,加以%符號以16進制符表示,如:
%F0%9F%98%80
(URL編碼工具可用URL Decoder/Encoder或 ATOOL)
Unicode 與 Emoji
表情符號(Emoji)是一種象形文字 (圖案符號),常在數(shù)字文本中使用來代表面孔丶天氣丶車輛和建筑物丶食物和飲料丶動物和植物, 或代表情緒丶感覺或活動的圖標,通常以豐富多彩的形式呈現(xiàn)。全球有近90%人口使用表情符號。

Unicode Emoji的支援需要廠商提供對映的Unicode 字型,如[非禮勿視猴(See-No-Evil Monkey)的表情符號]??(https://emojipedia.org/see-no-evil-monkey/),就有多種廠商提供。
另外,如2017年Google Android 8.0有支援不同姓別及膚色的人物表情包。
性別政治
- 為了促進性別平等,2016年Unicode 的Emoji委員會同意加入11個表情符號,可以搭配不同的姓別及膚色,排列組合可以產(chǎn)出百多馀的表情符號(Bleuel, 2016)

在緬甸的羅興亞人
2017年底,Unicode聯(lián)盟考慮編碼“Hanifi Rohingya”的書寫系統(tǒng),是二十世紀八十年代為羅興亞人開發(fā)的書寫系統(tǒng),羅興亞人在之前并無通用的書面文字(Agence France-Presse, 2017)。
盡管許多羅興亞人在緬甸遭受與種族清洗相似的壓迫時,缺乏識字和獲取信息技術的機會,一套數(shù)字化字符集可以讓羅興亞人用自己的語言使用社交媒體,發(fā)送短信,寫電子郵件等等。 但這一舉措將產(chǎn)生重大的象征性后果。
Unicode在東亞
->Unicode發(fā)展史上,一個重要的挑戰(zhàn)和里程碑是統(tǒng)一漢字(Unihan)。
Unihan的早期發(fā)展涉及中日韓三種語言所用的漢字,又稱CJK,後期以有越南用的漢字加入,稱CJKV。
統(tǒng)一漢字的特點在于,如是幾種語言共享的符號且經(jīng)同意,是共享同一編碼,專用的漢字則否。
- 從多語互聯(lián)網(wǎng)的角度,Unicode支持東亞主要的語言是互聯(lián)網(wǎng)國際化的重要里程碑。日本科學技術與社會學者學者中山茂(Nakayama Shigeru)認為:
東亞人習慣于處理多字節(jié)系統(tǒng), 對比西方 單字節(jié)文化來說。對處理復雜系統(tǒng)來說, 我們東亞的多字節(jié)文化將在未來被證明是有優(yōu)勢的(p. 12)。

字集
XML及其子集 HTML采用UTF-8作為標準字集,理論上我們可以在各種支持XML標準的瀏覽器上顯示任何地區(qū)文字的 網(wǎng)頁,只要電腦本身安裝有合適的字體即可??梢岳?amp;#nnn;的格式顯示特定的字符。nnn代表該字符的十進制 Unicode 代碼。如果采用十六進制代碼,在編碼之前加上x字符即可。但部分舊版本的瀏覽器可能無法識別十六進制代碼。
然而部分由于Unicode 版本發(fā)展原因,很多瀏覽器只能顯示UCS-2 完整 字符集也即日常使用的Unicode 版本中的一個小子集。
使用:
- 為什么使用Unicode?
因為Unicode比ANSI好用。 自從Windows2K開始,Win的系統(tǒng)內(nèi)核開始完全支持并完全應用Unicode編寫,所有ANSI字符在進入底層前,都會被相應的API轉(zhuǎn)換成Unicode。所以,如果你一開始就使用Unicode,則可以減少轉(zhuǎn)換的用時和RAM開銷。 對于JAVA/.NET等這些“新”的語言來說,內(nèi)置的字符串所使用的字符集已經(jīng)完全是Unicode。最重要的是,世界上大多數(shù)程序用的字符集都是Unicode,因為Unicode有利于程序國際化和標準化。
鏈接:https://www.zhihu.com/question/23374078/answer/24385963
Unicode 和 UTF-8 有何區(qū)別?
- 簡單來說:
UTF-8 是對Unicode編碼的一種編碼方式。
原因:節(jié)省流量和硬盤
Unicode 是「字符集」UTF-8 是「編碼規(guī)則」其中:字符集:為每一個「字符」分配一個唯一的 ID(學名為碼位 / 碼點 / Code Point)編碼規(guī)則:將「碼位」轉(zhuǎn)換為字節(jié)序列的規(guī)則(編碼/解碼 可以理解為 加密/解密 的過程)
- 廣義的 Unicode 是一個標準,定義了一個字符集以及一系列的編碼規(guī)則,即 Unicode 字符集和 UTF-8、UTF-16、UTF-32 等等編碼……Unicode 字符集為每一個字符分配一個碼位,例如「知」的碼位是 30693,記作 U+77E5(30693 的十六進制為 0x77E5)。UTF-8 顧名思義,是一套以 8 位為一個編碼單位的可變長編碼。會將一個碼位編碼為 1 到 4 個字節(jié):U+ 0000 ~ U+ 007F: 0XXXXXXX
U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
根據(jù)上表中的編碼規(guī)則,之前的「知」字的碼位 U+77E5 屬于第三行的范圍: 7 7 E 5
0111 0111 1110 0101 二進制的 77E5
0111 011111 100101 二進制的 77E5
1110XXXX 10XXXXXX 10XXXXXX 模版(上表第三行)
11100111 10011111 10100101 代入模版
E 7 9 F A 5
這就是將 U+77E5 按照 UTF-8 編碼為字節(jié)序列 E79FA5 的過程。反之亦然
為什幺要使用Unicode?
(1) 可以很容易地在不同語言之間進行數(shù)據(jù)交換。
(2) 使你能夠分配支持所有語言的單個二進制.exe文件或DLL文件。
(3) 提高應用程序的運行效率。
- Windows 2000是使用Unicode從頭進行開發(fā)的,如果調(diào)用任何一個Windows函數(shù)并給它傳遞一個ANSI字符串,那幺系統(tǒng)首先要將字符串轉(zhuǎn)換成Unicode,然后將Unicode字符串傳遞給操作系統(tǒng)。如果希望函數(shù)返回ANSI字符串,系統(tǒng)就會首先將Unicode字符串轉(zhuǎn)換成ANSI字符串,然后將結(jié)果返回給你的應用程序。進行這些字符串的轉(zhuǎn)換需要占用系統(tǒng)的時間和內(nèi)存。

如何編寫Unicode源代碼?
- Microsoft公司為Unicode設計了WindowsAPI,這樣,可以盡量減少代碼的影響。實際上,可以編寫單個源代碼文件,以便使用或者不使用Unicode來對它進行編譯。只需要定義兩個宏(UNICODE和_UNICODE),就可以修改然后重新編譯該源文件。UNICODE宏用于C運行期頭文件,而UNICODE宏則用于Windows頭文件。當編譯源代碼模塊時,通常必須同時定義這兩個宏。
Unicode和DBCS之間的區(qū)別
Unicode使用(特別在C程序設計語言環(huán)境里)“寬字符集”?!窾nicode中的每個字符都是16位寬而不是8位寬。」在Unicode中,沒有單單使用8位數(shù)值的意義存在。相比之下,在“雙位組字符集”中我們?nèi)匀惶幚?位數(shù)值。有些位組自身定義字符,而某些位組則顯示需要和另一個位組共同定義一個字符。
處理DBCS字符串非常雜亂,但是處理Unicode文字則像處理有秩序的文字。您也許會高興地知道前128個Unicode字符(16位代碼從0x0000到0x007F)就是ASCII字符,而接下來的128個Unicode字符(代碼從0x0080到0x00FF)是ISO 8859-1對ASCII的擴展。Unicode中不同部分的字符都同樣基于現(xiàn)有的標準。這是為了便于轉(zhuǎn)換。希臘字母表使用從0x0370到0x03FF的代碼,斯拉夫語使用從0x0400到0x04FF的代碼,美國使用從0x0530到0x058F的代碼,希伯來語使用從0x0590到0x05FF的代碼。中國、日本和韓國的象形文字(總稱為CJK)占用了從0x3000到0x9FFF的代碼。Unicode的最大好處是這里只有一個字符集,沒有一點含糊。
Unicode的漏洞
http://www.sudu.cn/info/index.php?op=article&id=33364
- 此篇文章是根據(jù)多篇文章整理的,并沒有盜竊行為,如果存在不合理的地方,希望先通知一下我!謝謝!
-說明:自己並沒有做出"禁止通過發(fā)布文章并在文章中添加超鏈接的形式進行SEO優(yōu)化推廣的行為;"
這一條的行為