心得2
定義:(參考條目:http://note.youdao.com/noteshare?id=7626ba13a42457cb2fed6b52dda0c112&sub=D039D1F4175E4FA9A1411F6E88024D05)
- Unicode( 統(tǒng)一碼、萬國碼雄妥、單一碼)是計算機科學(xué)領(lǐng)域里的一項業(yè)界標(biāo)準(zhǔn),包括字符集价卤、編碼方案等栽连。Unicode 是為了解決傳統(tǒng)的字符編碼方案的局限而產(chǎn)生的忱叭,它為每種語言中的每個字符設(shè)定了統(tǒng)一并且唯一的 二進制編碼玫鸟,以滿足跨語言梢卸、跨平臺進行文本轉(zhuǎn)換、處理的要求摔笤。
字符與編碼 Characters and Encoding
- 將人類自然語言的書寫文字符號轉(zhuǎn)換成數(shù)字機器能處理的“0”和“1”需要編碼(Encoding)够滑。
把語言的字符集成,制定出字符集(CharacterSets)通常是國家政府或產(chǎn)業(yè)界制定出來的吕世,著名的例子如中國的國家標(biāo)準(zhǔn)GB-2312丶繁體/正體字早期的業(yè)界標(biāo)準(zhǔn)Big5丶香港政府制定的香港增補字符集 HKSCS等等彰触。
由於各種字符集的標(biāo)準(zhǔn)不一,若有沖突的編碼定義則不同語言文字符號無法在同一文件中出現(xiàn)命辖,需要額外做轉(zhuǎn)換况毅。如中文簡體字早期標(biāo)準(zhǔn)GB-2312和繁體/正體字早期標(biāo)準(zhǔn)Big5是不相容的,不但需要額外轉(zhuǎn)換尔艇,這兩種標(biāo)準(zhǔn)的文字是無法同時出現(xiàn)在一份文件里尔许。
此外,由於編碼之間的相容性及應(yīng)用程序如瀏覽器的支援不一终娃,會發(fā)生編碼錯誤以致顯示內(nèi)容不正確味廊,又稱亂碼(Mojibake),或甚致是安全漏洞。
Unicode標(biāo)準(zhǔn)與世界語言
- Unicode標(biāo)準(zhǔn)所支援的世界書寫語言詳列於官方網(wǎng)站之Supported Scripts頁面余佛,中日韓共用的漢字(Han)早在1993年第1.1版已納入柠新。
由於字符數(shù)及編碼的特性,由Mark Davis所做的統(tǒng)計來看辉巡,Unicode標(biāo)準(zhǔn)中字符數(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標(biāo)準(zhǔn)統(tǒng)一編碼的基礎(chǔ)設(shè)施
- 為解決編碼交換等問題,為所有文本(在互聯(lián)網(wǎng)和所有設(shè)備上)提供了基礎(chǔ)設(shè)施放椰。這基礎(chǔ)設(shè)施的工作包括兩部分:
其一為為文本中使用的每個字符提供一個數(shù)字作烟,而Unicode標(biāo)準(zhǔn)是這些數(shù)字的字典。
其二是協(xié)助設(shè)備處理世界上所有的語言砾医,因而聯(lián)盟維護一大數(shù)據(jù)庫拿撩,為不同的語言和國家提供的術(shù)語和格式 (Unicode, 2017)。此數(shù)據(jù)庫名叫CLDR (Common Locale Data Repository)如蚜,中譯為「通用區(qū)域資料庫」
unicode格式
- Unicode是一種可能的寬字符集压恒。由 Unicode 協(xié)會開發(fā)的能表示幾乎世界上所有書寫語言的字符編碼標(biāo)準(zhǔn)。Unicode 字符清單有多種代表形式错邦,包括 UTF-8探赫、UTF-16 和 UTF-32。大多 Windows 界面使用 UTF-16撬呢。
Unicode 傳輸格式 8 (UTF-8)
在 ASCII 碼基礎(chǔ)上發(fā)展的協(xié)議字符設(shè)置伦吠。UTF-8 協(xié)議提供 ASCII 碼的擴展支持,UCS-2 碼的翻譯魂拦,國際 16 進制 Unicode 編碼字符設(shè)置毛仪。與使用字符數(shù)據(jù)的 ASCII 或擴展 ASCII 編碼相比,UTF-8 可獲得更大范圍的名稱芯勘。
- Unicode 字符系統(tǒng) (UCS)
作為 Unicode 標(biāo)準(zhǔn)一部分的國際標(biāo)準(zhǔn)字符集參考√肚В現(xiàn)在廣泛使用的 UCS 標(biāo)準(zhǔn)的版本是 UCS-2,該版本指定的 16 位字符數(shù)值已作為世界上大多數(shù)語言的編碼標(biāo)準(zhǔn)而被接受借尿,并得到了承認(rèn)。
直接選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ù)字文本中使用來代表面孔丶天氣丶車輛和建筑物丶食物和飲料丶動物和植物, 或代表情緒丶感覺或活動的圖標(biāo)厌小,通常以豐富多彩的形式呈現(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)幔欧,是二十世紀(jì)八十年代為羅興亞人開發(fā)的書寫系統(tǒng)罪治,羅興亞人在之前并無通用的書面文字(Agence France-Presse, 2017)。
盡管許多羅興亞人在緬甸遭受與種族清洗相似的壓迫時琐馆,缺乏識字和獲取信息技術(shù)的機會规阀,一套數(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)國際化的重要里程碑海洼。日本科學(xué)技術(shù)與社會學(xué)者學(xué)者中山茂(Nakayama Shigeru)認(rèn)為:
東亞人習(xí)慣于處理多字節(jié)系統(tǒng), 對比西方 單字節(jié)文化來說。對處理復(fù)雜系統(tǒng)來說富腊, 我們東亞的多字節(jié)文化將在未來被證明是有優(yōu)勢的(p. 12)坏逢。
字集
XML及其子集 HTML采用UTF-8作為標(biāo)準(zhǔn)字集,理論上我們可以在各種支持XML標(biāo)準(zhǔn)的瀏覽器上顯示任何地區(qū)文字的 網(wǎng)頁赘被,只要電腦本身安裝有合適的字體即可是整。可以利用&#nnn;的格式顯示特定的字符民假。nnn代表該字符的十進制 Unicode 代碼浮入。如果采用十六進制代碼,在編碼之前加上x字符即可阳欲。但部分舊版本的瀏覽器可能無法識別十六進制代碼舵盈。
然而部分由于Unicode 版本發(fā)展原因,很多瀏覽器只能顯示UCS-2 完整 字符集也即日常使用的Unicode 版本中的一個小子集球化。
使用:
- 為什么使用Unicode?
因為Unicode比ANSI好用秽晚。 自從Windows2K開始,Win的系統(tǒng)內(nèi)核開始完全支持并完全應(yīng)用Unicode編寫筒愚,所有ANSI字符在進入底層前赴蝇,都會被相應(yīng)的API轉(zhuǎn)換成Unicode。所以巢掺,如果你一開始就使用Unicode句伶,則可以減少轉(zhuǎn)換的用時和RAM開銷。 對于JAVA/.NET等這些“新”的語言來說陆淀,內(nèi)置的字符串所使用的字符集已經(jīng)完全是Unicode考余。最重要的是,世界上大多數(shù)程序用的字符集都是Unicode轧苫,因為Unicode有利于程序國際化和標(biāo)準(zhǔn)化楚堤。
鏈接:https://www.zhihu.com/question/23374078/answer/24385963
Unicode 和 UTF-8 有何區(qū)別?
- 簡單來說:
UTF-8 是對Unicode編碼的一種編碼方式含懊。
原因:節(jié)省流量和硬盤
Unicode 是「字符集」UTF-8 是「編碼規(guī)則」其中:字符集:為每一個「字符」分配一個唯一的 ID(學(xué)名為碼位 / 碼點 / Code Point)編碼規(guī)則:將「碼位」轉(zhuǎn)換為字節(jié)序列的規(guī)則(編碼/解碼 可以理解為 加密/解密 的過程)
- 廣義的 Unicode 是一個標(biāo)準(zhǔn)身冬,定義了一個字符集以及一系列的編碼規(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) 提高應(yīng)用程序的運行效率蝇更。
- 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é)果返回給你的應(yīng)用程序相嵌。進行這些字符串的轉(zhuǎn)換需要占用系統(tǒng)的時間和內(nèi)存。
如何編寫Unicode源代碼况脆?
- Microsoft公司為Unicode設(shè)計了WindowsAPI饭宾,這樣,可以盡量減少代碼的影響格了。實際上看铆,可以編寫單個源代碼文件,以便使用或者不使用Unicode來對它進行編譯盛末。只需要定義兩個宏(UNICODE和_UNICODE)弹惦,就可以修改然后重新編譯該源文件。UNICODE宏用于C運行期頭文件悄但,而UNICODE宏則用于Windows頭文件棠隐。當(dāng)編譯源代碼模塊時,通常必須同時定義這兩個宏檐嚣。
Unicode和DBCS之間的區(qū)別
Unicode使用(特別在C程序設(shè)計語言環(huán)境里)“寬字符集”助泽。「Unicode中的每個字符都是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)有的標(biāo)準(zhǔ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)化推廣的行為;"
這一條的行為