字符編碼Unicode圆仔、UTF-8和ANSI

ANSI、UTF-8蔫劣、Unicode為字符代碼的三種編碼格式坪郭,一個字符可以被編碼成ANSI、UTF-8或Unicode格式脉幢,這三種格式只是表現(xiàn)形式不一樣歪沃,其表示內(nèi)容是一樣的。

ANSI嫌松、UTF-8沪曙、Unicode


ANSI、UTF-8萎羔、Unicode為字符代碼的三種編碼格式液走,一個字符可以被編碼成ANSI、UT-F8或Unicode格式,這三種格式只是表現(xiàn)形式不一樣缘眶,其表示內(nèi)容是一樣的嘱根。如下表:

char ANSI(GBK) Unicode UTF-8
0xD6D0 0x4E2D 0xE4B8AD

ANSI編碼

ANSI表示英文字符時用一個字節(jié),表示中文用兩個字節(jié)

為了使計算機(jī)支持多種語言巷懈,不同的國家和地區(qū)制定了不同的標(biāo)準(zhǔn)该抒,由此產(chǎn)生了 GB2312, BIG5, JIS 等各自的編碼標(biāo)準(zhǔn)。這些使用 2 個字節(jié)來代表一個字符的各種漢字延伸編碼方式顶燕,稱為 ANSI 編碼凑保。在簡體中文系統(tǒng)下,ANSI 編碼代表 GB2312 編碼涌攻,在日文操作系統(tǒng)下欧引,ANSI 編碼代表 JIS 編碼。

對于ANSI編碼而言癣漆,0x00~0x7F之間的字符维咸,依舊是1個字節(jié)代表一個字符(ASCII編碼),而這之外的字符通常是使用0x80~0xFF范圍內(nèi)的兩個字節(jié)來表示一個字符。比如漢字找那個的'中'在簡體中文中使用[0xD6, 0xD0]這兩個字節(jié)存儲梁剔。

下表中展示了在不同ANSI標(biāo)準(zhǔn)下的編碼:

char ANSI(GBK) ANSI(Big5) ANSI(JIS) Unicode UTF-8
0xCEC4 0xA4E5 0x95B6 0x6587 0xE69687

可以看出髓帽,不同ANSI編碼之間互不兼容,當(dāng)信息在國際間交流時租副,無法將屬于兩種語言的文字,存儲在同一段 ANSI 編碼的文本中较性。需要將不同的ANSI編碼都轉(zhuǎn)換成UTF-8編碼用僧,進(jìn)而存儲

Unicode編碼

Unicode字符集編碼全稱:Universal Multiple-Octet Coded Character Set赞咙,通用多八位編碼字符集责循。Unicode字符集是國際組織制定的可以容納世界上所有文字和符號的編碼方案。

Unicode編碼使用兩個字節(jié)(0x0000-0xFFFF)來表示一個字符攀操,世界上任何文字和符號都對應(yīng)于Unicode字符集中的一個二進(jìn)制代碼院仿,但是:

Unicode只是一個符號集, 它只規(guī)定了符號的二進(jìn)制代碼, 卻沒有規(guī)定這個二進(jìn)制代碼應(yīng)該如何存儲。

Unicode編碼的優(yōu)點(diǎn)是覆蓋了世界上所有的文字和符號速和,缺陷則是對于英文字符浪費(fèi)了一個字節(jié)歹垫。例如:英文A在unicode中表示為0x0041。

UTF-8編碼

UTF-8是Unicode的實現(xiàn)方式之一颠放。

UTF-8全稱:8bit Unicode Transformation Format排惨,8比特Unicode通用轉(zhuǎn)換格式。UTF-8是一種針對Unicode的可變長度字符編碼碰凶∧喊牛可以表示Unicode標(biāo)準(zhǔn)中的任何一個字符鹿驼,且其編碼中的第一個字節(jié)仍然與ASCII兼容。

UTF-8是一種變長的編碼方式谴麦,可以使用1~6個字節(jié)對Unicode字符集進(jìn)行編碼蠢沿,編碼規(guī)則如下:

  1. 對于單字節(jié)的符號, 字節(jié)的第一位設(shè)為0, 后面7位為這個符號的unicode碼. 因此對于
    英語字母, UTF-8編碼和ASCII碼是相同的.

  2. 對于n字節(jié)的符號(n>1), 第一個字節(jié)的前n位都設(shè)為1, 第n+1位設(shè)為0, 后面字節(jié)的前
    兩位一律設(shè)為10. 剩下的沒有提及的二進(jìn)制位, 全部為這個符號的unicode碼.

n Unicode符號范圍 UTF-8編碼方式
1 0000 0000 - 0000 007F 0xxxxxxx
2 0000 0080 - 0000 07FF 110xxxxx 10xxxxxx
3 0000 0800 - 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
4 0001 0000 - 0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5 0020 0000 - 03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6 0400 0000 - 7FFF FFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

注:在UTF-8編碼中,英文字符占一個字節(jié)匾效,中文字符占用3個字節(jié)舷蟀。

總結(jié)

1、中文操作系統(tǒng)默認(rèn)ansi編碼面哼,生成的txt文件默認(rèn)為ansi編碼野宜。

2、國際文檔(txt和xml)使用unicode編碼是正宗做法魔策;操作系統(tǒng)和瀏覽器都能夠“理解”unicode編碼匈子。瀏覽器“迫于壓力”才“理解”utf-8編碼。但是闯袒,操作系統(tǒng)有時只認(rèn)unicode編碼虎敦。

3、Windows記事本有四個編碼選項:ANSI政敢、Unicode其徙、Unicode Big Endian和UTF-8。

  • ANSI是默認(rèn)的編碼方式喷户。對于英文文件是ASCII編碼唾那,對于簡體中文文件是GB2312編碼(只針對Windows簡體中文版,如果是繁體中文版會采用Big5碼)褪尝。
  • Unicode編碼指的是UCS-2編碼方式闹获,即直接用兩個字節(jié)存入字符的Unicode碼。這個選項用的little endian格式河哑。
  • Unicode big endian編碼與上一個選項相對應(yīng)避诽。采用big endian格式。
  • UTF-8指帶BOM 的UTF-8璃谨。

ANSI茎用、UTF-8、Unicode轉(zhuǎn)換


Windows Unicode and Character Sets

Unicode編碼字符集是最通用的字符編碼標(biāo)準(zhǔn)睬罗,Windows應(yīng)用程序使用Unicode字符集的UTF-16實現(xiàn)版本。同時旭斥,Windows也支持傳統(tǒng)的字符集:單字節(jié)字符集(Single-byte character sets, SBCS)和多字節(jié)字符集(Multibyte character sets)容达。

很多Windows API函數(shù)擁有“A”和“W”版本,“A”版本基于Windows Code Page垂券,而“W”版本則基于Unicode字符花盐。應(yīng)用程序可以通過WideCharToMultiByteMultiByteToWideChar兩個函數(shù)來轉(zhuǎn)換Unicode字符串和基于Windows Code Page字符串羡滑。雖然函數(shù)名中含有“MultiByte”,這些函數(shù)實際上能處理SBCS算芯、DBCS和multibyte character set Code page柒昏。

編碼轉(zhuǎn)換

在Windows平臺下,ANSI熙揍、UTF-8职祷、Unicode三者之間的轉(zhuǎn)換主要依賴于WideCharToMultiByteMultiByteToWideChar兩個函數(shù)。

  • Unicode轉(zhuǎn)UFT-8:設(shè)置WideCharToMultiByte的CodePage參數(shù)為CP_UTF8届囚;
  • UTF-8轉(zhuǎn)Unicode:設(shè)置MultiByteToWideChar的CodePage參數(shù)為CP_UTF8
  • Unicode轉(zhuǎn)ANSI:設(shè)置WideCharToMultiByte的CodePage參數(shù)為CP_ACP有梆;
  • ANSI轉(zhuǎn)Unicode:設(shè)置MultiByteToWideChar的CodePage參數(shù)為CP_ACP;
  • UTF-8轉(zhuǎn)ANSI:先將UTF-8轉(zhuǎn)換為Unicode意系,再將Unicode轉(zhuǎn)換成ANSI泥耀;
  • ANSI轉(zhuǎn)UTF-8:先將ANSI轉(zhuǎn)換為Unciode,再將Unicode轉(zhuǎn)換成ANSI蛔添。


本文內(nèi)容應(yīng)該存在錯誤或者是以偏概全的問題痰催,后續(xù)會繼續(xù)深入了解。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迎瞧,一起剝皮案震驚了整個濱河市夸溶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夹攒,老刑警劉巖蜘醋,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咏尝,居然都是意外死亡压语,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門编检,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胎食,“玉大人,你說我怎么就攤上這事允懂〔蘖” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵蕾总,是天一觀的道長粥航。 經(jīng)常有香客問我,道長生百,這世上最難降的妖魔是什么递雀? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蚀浆,結(jié)果婚禮上缀程,老公的妹妹穿的比我還像新娘搜吧。我一直安慰自己,他們只是感情好杨凑,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布滤奈。 她就那樣靜靜地躺著,像睡著了一般撩满。 火紅的嫁衣襯著肌膚如雪蜒程。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天鹦牛,我揣著相機(jī)與錄音搞糕,去河邊找鬼。 笑死曼追,一個胖子當(dāng)著我的面吹牛窍仰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播礼殊,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼驹吮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晶伦?” 一聲冷哼從身側(cè)響起碟狞,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎婚陪,沒想到半個月后族沃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泌参,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年脆淹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沽一。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡盖溺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铣缠,到底是詐尸還是另有隱情烘嘱,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布蝗蛙,位于F島的核電站蝇庭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏捡硅。R本人自食惡果不足惜遗契,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望病曾。 院中可真熱鬧牍蜂,春花似錦、人聲如沸泰涂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逼蒙。三九已至从绘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間是牢,已是汗流浹背僵井。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驳棱,地道東北人批什。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像社搅,于是被迫代替她去往敵國和親驻债。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 0 前言 在平時的開發(fā)過程中大部分人應(yīng)該都遇到過中文亂碼問題形葬,瀏覽網(wǎng)頁時也會遇到內(nèi)容顯示亂碼的情況合呐,一般遇到這種情...
    小豬啊嗚閱讀 2,539評論 1 10
  • 字符集和編碼簡介 在編程中常常可以見到各種字符集和編碼笙以,包括ASCII,MBCS,Unicode等字符集淌实。確切的說...
    蘭山小亭閱讀 8,453評論 0 13
  • 4月休息的時候就思考過以后的方向拆祈,甚至為此咨詢過朋友,大家給的建議基本上和我心里的想法一致——繼續(xù)我的兒童教育工作...
    悅心0516閱讀 1,864評論 1 4
  • es6中新增了set類型的數(shù)據(jù)谈息,自動去掉重復(fù)的數(shù)據(jù) Array.from()的作用是是可以把類數(shù)組對象轉(zhuǎn)化為數(shù)組缘屹。
    Sccong閱讀 944評論 0 0
  • Dead Men Tell No Tales “who am I to you?” “treasure.”
    Yadyfly閱讀 335評論 0 0