字符集和編碼_第1頁(yè)
字符集和編碼_第2頁(yè)
字符集和編碼_第3頁(yè)
字符集和編碼_第4頁(yè)
字符集和編碼_第5頁(yè)
已閱讀5頁(yè),還剩42頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、字符集和編碼 - by jeffrey yang 1、亂碼現(xiàn)象 2、操作系統(tǒng)字符集解決方案 3、unicode 介紹 17平面 UTF8,UTF16,UTF32 4、其他編碼方式Gb系列Base64URLEncode 5、其他1亂亂碼現(xiàn)象碼現(xiàn)象 ufffd. bytes中超出了字符集顯示范圍,違反了編碼規(guī)則的。 對(duì)于沒(méi)有包含 的編碼格式的文件將無(wú)法保存文件。例如gbk. ?及3F 。1、在 Ancii中沒(méi)有這個(gè)字符,那么就會(huì)編碼成 3F,2、unicode中沒(méi)有對(duì)應(yīng)unicode字符。 符合編碼規(guī)則, 但是在系統(tǒng)的字符集中目前屬于未分配字符,或沒(méi)有對(duì)應(yīng)的字符。例如用在部分系統(tǒng)上utf 8顯示e

2、moji. 僅僅是無(wú)法正常顯示,可保存。 其他:鑵鑵, 1.1幾個(gè)問(wèn)題幾個(gè)問(wèn)題1、java 中char 占用幾個(gè)字節(jié)2、Java中字符串“a”lenght“a中”“a中” subString 會(huì)怎么樣3、如果網(wǎng)頁(yè)傳遞的參數(shù)值中中文是gbk URL encoding 的,而我們系統(tǒng)的http request 參數(shù)解析是utf8格式的如何處理。4、哪些場(chǎng)景的字符編碼格式轉(zhuǎn)換,不會(huì)導(dǎo)致信息丟失。5、為何標(biāo)準(zhǔn)的utf-8不需要bom,而utf16,utf32 必須。6、內(nèi)存中字符串出現(xiàn)什么樣的亂碼后,就不能反轉(zhuǎn)回來(lái)了。7、windows 記事本下聯(lián)通,移動(dòng)的故事, why8、表情符號(hào),什么情況下需要處

3、理嗎?9、windows 上文本文件保存的unicode 格式,真實(shí)格式是什么10、java 哦老系統(tǒng),經(jīng)??吹?property 文件上 uxxxx 的字符,這些文件是什么格式,為什么這么做?code unit 的相關(guān)述語(yǔ)的相關(guān)述語(yǔ)A character is a minimal unit of text that has semantic value.A character set is a collection of characters that might be used by multiple languages. Example: The Latin character set

4、is used by English and most European languages, though the Greek character set is used only by the Greek language. 以及unicode , gbk等A coded character set is a character set, where each character is assigned with a unique number.A code point is a value that can be used in a coded character set. A code

5、 point is a 32-bit integer data type, where the lower 21 bits represent a valid code point value and the upper 11 bits are 0.A code unit is a bit sequence used to encode each single character unit of a repertoire within each encoding form.Character repertoire (the abstract list of characters)抽象字符集,我

6、們平時(shí)表述的抽象字符集,我們平時(shí)表述的: The character repertoire is an abstract list of more than one million characters found in a wide variety of scripts including Latin, Cyrillic, Chinese, Korean, Japanese, Hebrew, and Aramaic. Other symbols such as musical notation are also included in the character repertoire. Bo

7、th the Unicode and GB18030 standards have a character repertoire. As new characters are added to one standard, the other standard also adds those characters, to maintain parity.Code unit Size: The code unit size is equivalent to the bit measurement for the particular encoding:A code unit in US-ASCII

8、 consists of 7 bits;A code unit in UTF-8, EBCDIC and GB18030 consists of 8 bits; 所以u(píng)tf8字符長(zhǎng)度為8個(gè)字節(jié)的n倍。倍。A code unit in UTF-16 consists of 16 bits; 所以u(píng)tf16字符長(zhǎng)度為16個(gè)字節(jié)的n倍倍。A code unit in UTF-32 consists of 32 bits.簡(jiǎn)單字符集簡(jiǎn)單字符集按照慣例,人們認(rèn)為字符集和字符編碼是同義詞, 因?yàn)槭褂猛瑯拥臉?biāo)準(zhǔn)來(lái)定義提供什么字符并且這些字符如何編碼到一系列的代碼單元(通常一個(gè)字符一個(gè)單元)例如最初的asci

9、i , iso8859 系列iso8859-1屬于單字節(jié)編碼,最多能表示的字符范圍是0-255,應(yīng)用于英文系列。比如,字母a的編碼為0 x61=97。很明顯,iso8859-1編碼表示的字符范圍很窄,無(wú)法表示中文字符。但是,由于是單字節(jié)編碼,和計(jì)算機(jī)最基礎(chǔ)的表示單位一致,所以很多時(shí)候,仍舊使用iso8859-1編碼來(lái)表示。而且在很多協(xié)議上,默認(rèn)使用該編碼2、操作系統(tǒng)字符集解決操作系統(tǒng)字符集解決方案方案 2.1、現(xiàn)代編碼模型 Bom CEF 2.2、操作系統(tǒng)編碼:windows , linux Linux 下的常用配置,命令2.1現(xiàn)代現(xiàn)代編碼模型編碼模型傳輸編碼語(yǔ)法:傳輸編碼語(yǔ)法:(transf

10、er encoding syntax),用于處理上一層次的字符編碼方案提供的字節(jié)序列。一般其功能包括兩種:一是把字節(jié)序列的值映射到一套更受限制的值域內(nèi),以滿足傳輸環(huán)境的限制,例如Email傳輸時(shí)base64或quoted-printable,都是把8位的字節(jié)編碼為7位長(zhǎng)的數(shù)據(jù);另一是壓縮字節(jié)序列的值如gzip , LZW等字符編碼方案字符編碼方案(CES:Character Encoding Scheme),也稱作serialization format。將定長(zhǎng)的整型值(即碼元)映射到8位字節(jié)序列,以便編碼后的數(shù)據(jù)的文件存儲(chǔ)或網(wǎng)絡(luò)傳輸。在使用Unicode的場(chǎng)合,使用一個(gè)簡(jiǎn)單的字符來(lái)指定字節(jié)順

11、序是大端序或者小端序(但對(duì)于UTF-8來(lái)說(shuō)并不需要專門(mén)指明字節(jié)序)字符編碼表字符編碼表: (CEF: Character Encoding Form),也稱為storage format“.是將編碼字符集的非負(fù)整數(shù)值(即抽象的碼位)轉(zhuǎn)換成有限比特長(zhǎng)度的整型值(稱為碼元code units)的序列。編碼字符集編碼字符集 (CCS : Coded Character Set)是將字符集中每個(gè)字符映射到1個(gè)坐標(biāo)抽象字符表抽象字符表 (Abstract character repertoire)是一個(gè)系統(tǒng)支持的所有抽象字符的集合,更久遠(yuǎn)的是硬件 2.1 serialization format 的實(shí)現(xiàn)

12、BOMBOM(Byte Order Mark),字節(jié)順序標(biāo)記,出現(xiàn)在文本文件頭部,Unicode編碼標(biāo)準(zhǔn)中用于標(biāo)識(shí)文件是采用哪種格式的編碼。Big Endian高字節(jié)在前高字節(jié)在前,低字節(jié)在低字節(jié)在后后 和Little Endian低字節(jié)在前低字節(jié)在前,高字節(jié)在后高字節(jié)在后UTF8不需要 BOM 來(lái)表明字節(jié)順序,但可以用 BOM 來(lái)表明編碼方式。字符 “Zero Width No-Break Space” 的 UTF-8 編碼是 EF BB BF。所以如果接收者收到以 EF BB BF 開(kāi)頭的字節(jié)字節(jié)流流,就知道這是 UTF-8編碼了。Windows 就是使用 BOM 來(lái)標(biāo)記文本文件的編碼方式

13、的。編碼表示(十六進(jìn)制)表示(十進(jìn)制)UTF-8EF BB BF239 187 191UTF-16(大端序)FE FF254 255UTF-16(小端序)FF FE255 254UTF-32(大端序)00 00 FE FF0 0 254 255UTF-32(小端序)FF FE 00 00255 254 0 0GB-1803084 31 95 33132 49 149 512.1 Character 的相關(guān)述語(yǔ)字符編碼(character encoding),字符映射(character map),字符集(character set)或者代碼頁(yè),在歷史上往往是同義概念,即字符表(repertoi

14、re)中的字符如何編碼為碼元的流(stream of code units)通常每個(gè)字符對(duì)應(yīng)單個(gè)碼元。碼元(Code Unit,也稱“代碼單元”)是指一個(gè)已編碼的文本中具有最短的比特組合的單元。對(duì)于UTF-8來(lái)說(shuō),碼元是8比特長(zhǎng);對(duì)于UTF-16來(lái)說(shuō),碼元是16比特長(zhǎng);對(duì)于UTF-32來(lái)說(shuō),碼元是32比特長(zhǎng)1。碼值(Code Value)是過(guò)時(shí)的用法。代碼頁(yè)通常意味著面向字節(jié)的編碼,但強(qiáng)調(diào)是一應(yīng)用于不能語(yǔ)言的編碼方案的集合.著名的如Windows代碼頁(yè)系列,IBM/DOS代碼頁(yè)系列.Unix或Linux不使用代碼頁(yè)概念,它們用charmap編碼空間: encoding space 。簡(jiǎn)單說(shuō)就是

15、包含所有字符的表的維度。可以用一對(duì)整數(shù)來(lái)描述,例如:GB2312漢字編碼空間是94 x 94。可以用一個(gè)整數(shù)來(lái)描述,例如:ISO-8859-1的編碼空間是2562.1字符編碼表字符編碼表storage format這對(duì)于定長(zhǎng)編碼來(lái)說(shuō)是個(gè)到自身的映射(null mapping),但對(duì)于變長(zhǎng)編碼來(lái)說(shuō),該映射比較復(fù)雜,把一些碼位映射到一個(gè)碼元,把另外一些碼位映射到由多個(gè)碼元組成的序列。例如,使用16比特長(zhǎng)的存儲(chǔ)單元保存數(shù)字信息,系統(tǒng)每個(gè)單元只能夠直接表示從0到65,535的數(shù)值,但是如果使用多個(gè)16位單元就能夠表示更大的整數(shù)。這就是CEF的作用,它可以把Unicode從0到140萬(wàn)的碼空間范圍的每個(gè)

16、碼位映射到單個(gè)或多個(gè)在0到65,5356范圍內(nèi)的碼值。最簡(jiǎn)單的字符編碼表就是單純地選擇足夠大的單位,以保證編碼字符集中的所有數(shù)值能夠直接編碼(一個(gè)碼位對(duì)應(yīng)一個(gè)碼值)。這對(duì)于能夠用使用八比特組來(lái)表示的編碼字符集(如多數(shù)傳統(tǒng)的非CJK的字符集編碼)是合理的,對(duì)于能夠使用十六比特來(lái)表示的編碼字符集(如早期版本的Unicode)來(lái)說(shuō)也足夠合理。但是,隨著編碼字符集的大小增加(例如,現(xiàn)在的Unicode的字符集至少需要21位才能全部表示),這種直接表示法變得越來(lái)越?jīng)]有效率,并且很難讓現(xiàn)有計(jì)算機(jī)系統(tǒng)適應(yīng)更大的碼值。因此,許多新近版本Unicode的系統(tǒng),或者將Unicode碼位對(duì)應(yīng)為可變長(zhǎng)度的8位字節(jié)序列

17、的UTF-8,或可變長(zhǎng)度的16位序列的UTF-16。.2.2Window & linuxwindows操作系統(tǒng)localeCodepage 映射(936=gbk,)character mapWindows 系統(tǒng) 代碼字linux操作系統(tǒng)編碼GBK | UTF8|charmap(即上面的5層模型)Unicode point codeLinux 代碼字,同unicode pioint code 一一對(duì)應(yīng)2.2 windows windows 中Codepage 下的character map 同 BIOS代碼頁(yè)也被稱為OEM代碼頁(yè)代碼頁(yè)。 操作系統(tǒng)使用自己的字符呈現(xiàn)引擎(rendering

18、 engine),可以支持多個(gè)不同的字符集編碼,這類代碼頁(yè)被稱作ANSI代碼頁(yè)。代碼頁(yè)。Window 查看代碼也:查看代碼也:chcp 一般是936代表gbk 那為什么gbk 的可以顯示日文? http:/ code pages are sets of characters or code pages (known as character encodings in other operating systems) used in Microsoft Windows from the 1980s and 1990s. Windows code pages were gradually supe

19、rseded when Unicode was implemented in Windows, although they are still supported both within Windows and other platforms.在Windows平臺(tái)下查看和修改字符集一、查看字符集:chcp, linux 看下就明白了 gunzip -c /usr/share/i18n/charmaps/GBK.gz 查看缺省編碼: locale2.2 Linux 字符集字符集Linux下幾個(gè)i18n(internationalization)相關(guān)的目錄和文件 /etc/sysconfig/i1

20、8n的文件LANG=zh_CN.GB2312 (指定當(dāng)前操作系統(tǒng)的字符集)SUPPORTED=zh_CN.GB2312(指定當(dāng)前操作系統(tǒng)支持的字符集)SYSFONT=lat0-sun16(指定當(dāng)前操作系統(tǒng)的字體) /usr/share/i18n/charmaps這個(gè)目錄下存放了該Linux操作系統(tǒng)可用字符集的安裝包,如果你的操作系統(tǒng)上沒(méi)有安裝某個(gè)字符集可以到這個(gè)目錄下尋找安裝包。例如:GB2312的安裝包名字為“GB2312.gz /usr/share/i18n/locales這個(gè)目錄下存放了和所有語(yǔ)言包對(duì)應(yīng)的locale信息,例如:zh_CN.GB2312是一個(gè)完整的字符集,其中zh表示語(yǔ)言

21、,CN表示這個(gè)語(yǔ)言使用的國(guó)家,GB2312表示這個(gè)語(yǔ)言所對(duì)應(yīng)的編碼/usr/lib/locale 這個(gè)目錄存放的都是目前操作系統(tǒng)上已經(jīng)安裝好的locale信息2.2Linux 字符集字符集 Linux下與i18n相關(guān)的幾個(gè)SHELL命令locale命令 (用來(lái)查看系統(tǒng)locale的信息) localedef命令(用來(lái)安裝系統(tǒng)locale的信息) Linux下安裝GB2312的示例Step 1: 到Linux字符集的安裝包目錄下 cd /usr/share/i18n/charmaps Step 2: 解壓該目錄下的GB2312.gz gunzip GB2312.gz Step 3: 安裝字符集

22、localedef -f GB2312 -i zh_CN /usr/lib/locale/zh_CN.GB2312 Step 4: 查看是否已經(jīng)定義 locale -a | grep GB2312 Step 5: 安裝完畢后,你只要修改/etc/sysconfig/i18n文件就可以修改當(dāng)前的字符集為新安裝的zh_CN.GB2312字符2.2 linux commond iconv l 列舉所有已知的字符集 iconv -f utf-8 -t gb2312 aaa.txt bbb.txt這個(gè)命令讀取aaa.txt文件,從utf-8編碼轉(zhuǎn)換為gb2312編碼,其輸出定向到bbb.txt文件 查看

23、文件編碼file命令 file test.sql 文件名編碼轉(zhuǎn)換 convmv -f GBK -t UTF-8 *.mp3 現(xiàn)在用linux,原來(lái)在windows里的文件都是用GBK編碼的.copy到linux下是亂碼,文件內(nèi)容可以用iconv來(lái)轉(zhuǎn)換可是好多中文的文件名還是亂碼,找到個(gè)可以轉(zhuǎn)換文件名編碼的命令,就是convmv. convmv命令詳細(xì)參數(shù) 例如 convmv -f GBK -t UTF-8 *.mp3 不過(guò)這個(gè)命令不會(huì)直正的轉(zhuǎn)換,你可以看到轉(zhuǎn)換前后的對(duì)比.如果要直正的轉(zhuǎn)換要加上參數(shù) -notest convmv -f GBK -t UTF-8 -notest *.mp33 Un

24、icode 介紹介紹 3.1、unicode 的五層模型 3.2、 Unicode的編碼空間 3.3、UCS2與UCS4,以及系統(tǒng),應(yīng)用支持情況 3.4、utf8, utf16,utf32 3.5、表情符號(hào) 3.6、3個(gè)編碼fileencoding, encoding, termencoding 3.1 Unicode 5層模型層模型/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter03 第一層就是確定字符的范圍,即要支持哪些字符 第二層是將字符和數(shù)字對(duì)應(yīng)起來(lái)(ucs2 和ucs4)統(tǒng)一

25、碼的編碼方式與ISO 10646的通用字符集概念相對(duì)應(yīng)。目前實(shí)際應(yīng)用的統(tǒng)一碼版本對(duì)應(yīng)于UCS-2,使用16位的編碼空間。也就是每個(gè)字符占用2個(gè)字節(jié)。其他編碼方法第二第三都是相同的 第三層的編碼的實(shí)現(xiàn) 用基本數(shù)據(jù)類型表示字符(Character encoding form) 包括UTF-8、UTF-16、UTF-32。 “UCS Transformation Format”的縮寫(xiě), 第四層的字節(jié)序 (bom)例如,“字”的UTF-32編碼是0 x5b57,如果用little endian表示,字節(jié)流是“57 5b 00 00”。如果用big endian表示,字節(jié)流是“00 00 5b 57”

26、第五層,傳遞轉(zhuǎn)義如base64等3.1 所以我們可以說(shuō)字符集有GBK, Unicode, ASCii ,iso 系列 而utf8,utf16, utf32是Unicode對(duì)應(yīng)編碼方式, GBK 字符集的編碼方式就是GBK, iso也有自己對(duì)于的編碼方式 ,如iso8859-1 Java: UCS2 (UTF-16雙字節(jié)) ;jdk 5以后: UCS2 為基礎(chǔ)UCS4部分字符以UTF-16四字節(jié) Linux, windows : UCS43.2 unicode的的編碼空間編碼空間 Unicode的編碼空間從U+0000到U+10FFFF,共有1,112,064個(gè)碼位(code point)可用來(lái)

27、映射字符. Unicode的編碼空間可以劃分為17個(gè)平面(plane),每個(gè)平面包含216(65,536)個(gè)碼位。17個(gè)平面的碼位可表示為從U+xx0000到U+xxFFFF,其中xx表示十六進(jìn)制值從0016到1016,共計(jì)17個(gè)平面。第一個(gè)平面稱為基本多語(yǔ)言平面基本多語(yǔ)言平面(Basic Multilingual Plane,BMP),或稱第零平面(Plane 0)。3.3Unicode的編碼的編碼空間空間 其他平面稱為輔助平面輔助平面(Supplementary Planes)?;径嗾Z(yǔ)言平面內(nèi),從U+D800到U+DFFF之間的碼位區(qū)段是永久保留不映射到Unicode字符。UTF-16就

28、利用保留下來(lái)的0 xD800-0 xDFFF區(qū)段的碼位來(lái)對(duì)輔助平面的字符的碼位進(jìn)行編碼??偪?Unicode 僅僅是字符集。包含( U+0000到U+10FFFF ) UCS-2 (for 2-byte Universal Character Set),只包含bmp 第一個(gè)平面的字符。比較局限。 UCS-4 (for 4-byte Universal Character Set)全部字符 GBK,GB2312,ASCI, ISO8859-1都是Unicode 的子集。 Unicode的實(shí)現(xiàn)方式不同于編碼方式。一個(gè)字符的Unicode編碼是確定的。但是在實(shí)際傳輸過(guò)程中,由于不同系統(tǒng)平臺(tái)的設(shè)計(jì)不一

29、定一致,以及出于節(jié)省空間的目的,對(duì)Unicode編碼的實(shí)現(xiàn)方式有所不同。Unicode的實(shí)現(xiàn)方式稱為Unicode轉(zhuǎn)換格式轉(zhuǎn)換格式(Unicode Transformation Format,簡(jiǎn)稱為UTF) UTF8UTF16 UTF32可以表示全部的Unicode UTF8UTF16 UTF32 All code points in the BMP are accessed as a single code unit in UTF-16 encoding and can be encoded in one, two or three bytes in UTF-8. Code points i

30、n Planes 1 through 16 (supplementary planes) are accessed as surrogate pairs in UTF-16 and encoded in four bytes in UTF-8. UTF8 最初16個(gè)字節(jié),對(duì)于bmp字符13個(gè)字節(jié),4個(gè)字節(jié)的UTF8 用于定義(Unicode6.1定義范圍:010 FFFF,包括emoji表情), 56個(gè)字節(jié)的utf8 已經(jīng)被廢棄。3.3 UCS-2與與UCS-4 UCS2其實(shí)只能表示UCS4中BMP(及0號(hào)平面)的部分。對(duì)于BMP的UCS2和UCS4編碼的轉(zhuǎn)換很簡(jiǎn) 單,UCS2-UCS4,只要

31、在編碼前兩加個(gè)全是0的字節(jié),而UCS4-UCS2就是把編碼的前兩個(gè)全為0的字節(jié)去掉。UCS2也就只能 表示BMP時(shí)而定義的 UCS-2優(yōu)點(diǎn):絕大部分的文字都可以用兩個(gè)字節(jié)編碼,對(duì)于CJK文字是比較節(jié)省空間的;文本處理比UTF-8方便得多3.4 UCS-4 與UTF-32 Utf-32 定長(zhǎng)4字節(jié)編碼方案 Ucs-4 完全等價(jià)與UTF-32 LE3.5 emoji 表情表情 many “emoji” have been defined in Unicode 6. But many emoji are outside the BMP, so cant be encoded in UCS-2 而ja

32、va 語(yǔ)言是基于ucs-2的,這就會(huì)導(dǎo)致在java 語(yǔ)言中,emoji的字符長(zhǎng)度可以計(jì)算出錯(cuò)。Java 環(huán)境本身的顯示為” 但這不影響字符的輸出,以及在網(wǎng)頁(yè)端的展示。3.5 Emoji Unicode Tables and mapping utf8 /emoji/tables/unicode /wiki/EmojiNative 1Apple 2Android 3Android 3UnicodeBytes (UTF-8)DescriptionU+1F601xF0 x9Fx98x81grinning

33、 face with smiling eyesU+1F602xF0 x9Fx98x82face with tears of joyU+1F603xF0 x9Fx98x83smiling face with open mouth3.6 亂碼亂碼-3個(gè)編碼 Fileencoding : 文件的encoding Encoding: 內(nèi)存中的encoding Termencoding: 客戶端的 encoding3.6java 中的亂碼中的亂碼Java 的字符串在內(nèi)存中是unicode(utf16),能夠表示最大字符集.在Java運(yùn)行時(shí)的世界里,亂碼產(chǎn)生(編譯時(shí)產(chǎn)生的這里不管)的源頭存在于兩個(gè)地方,其

34、實(shí)也就是我上面提及的兩個(gè)函數(shù)(發(fā)生端的getBytes ,和接受端byteToString),getBytes(String charset) 如果按照指定的charset去對(duì)一個(gè)unicode String進(jìn)行編碼,但是發(fā)現(xiàn)這個(gè)編碼體系里(比如iso-8859-1)沒(méi)有這個(gè)字符,那么就會(huì)編碼成3F(其實(shí)就是一個(gè)問(wèn)號(hào)),這樣就造成了信息的丟失了,是不可以恢復(fù)的。 new String(byte bytes,String charset) 如果對(duì)一個(gè)字節(jié)數(shù)組按照指定的字符集去解碼,但是字符集突然對(duì)其中一段編碼不認(rèn)識(shí)的時(shí)候,例如某一段字節(jié)數(shù)組按照UTF-8解碼的時(shí)候,不認(rèn)識(shí)了,到了unicode字

35、符串這邊就是”uFFFD”,其實(shí)這個(gè)東西叫做REPLACEMENT CHARACTER,顯示的是一個(gè)問(wèn)號(hào)ByteToString, 很多時(shí)候框架已經(jīng)幫我們做了這個(gè)轉(zhuǎn)換,甚至在讀取流時(shí)就是用字節(jié)流(例如:InputStreamReader ), 如果框架轉(zhuǎn)換的編碼同發(fā)送端不一致,那么我們需要先 tobyte(“框架編碼”), 然后bytesTOString(“發(fā)送端編碼”)。 如果“框架編碼”不是無(wú)損編碼,那么可能帶信息丟失。4、其他編碼方式、其他編碼方式 Ascii Iso 系列 unicode 字符集 以及utf系列編碼(前面已介紹) Gb系列 base64編碼 Urlencode Java

36、 的 propertiesASCII 1, 常用字符集分類 ASCII及其擴(kuò)展字符集 作用:表語(yǔ)英語(yǔ)及西歐語(yǔ)言。 位數(shù):ASCII是用7位表示的,能表示128個(gè)字符;其擴(kuò)展使用8位表示,表示256個(gè)字符。 范圍:2。2,ASCII從00到7F,擴(kuò)展從00到FF。 ISO-8859-1字符集 作用:擴(kuò)展ASCII,表示西歐、希臘語(yǔ)等。 位數(shù):8位, 范圍:從00到FF,兼容ASCII字符集。 ASCII使用數(shù)字32到 127來(lái)表示所有的英文字母,比如空格是32,字母A是65等等。使用7個(gè)比特就可以存儲(chǔ)所有這樣字符。那個(gè)時(shí)代的大多數(shù)計(jì)算機(jī)使用8個(gè)比特來(lái),所以你不但可以存儲(chǔ)全部的ASCII,而且還有

37、一個(gè)比特可以多出來(lái)用作其他。如果你想,你可以把它用作你不可告人的目的。32以下的碼字是不可打印的,它們屬于控制字符,像7表示響鈴,12表示打印機(jī)換紙。Iso 8859 系列系列 ISO/IEC 8859-1又稱Latin-1或“西歐語(yǔ)言” ISO/IEC 8859-2又稱Latin-3或“南歐語(yǔ)言” ISO/IEC 8859-3又稱Latin-3或“南歐語(yǔ)言” ISO/IEC 8859-4又稱Latin-4或“北歐語(yǔ)言”他們都是用一個(gè)字節(jié)表示,最多256個(gè)字符,前128個(gè)兼容Ascii 后128位為各自語(yǔ)言的個(gè)性字符。GBK 編碼,編碼,BIG5 GB2312字符集 作用:國(guó)家簡(jiǎn)體中文字符集,

38、兼容ASCII。 位數(shù):使用2個(gè)字節(jié)表示, BIG5字符集 作用:統(tǒng)一繁體字編碼。 位數(shù):使用2個(gè)字節(jié)表示,表示13053個(gè)漢字。 GBK字符集 作用:它是GB2312的擴(kuò)展,加入對(duì)繁體字的支持,位數(shù):使用2個(gè)字節(jié)表示,可表示21886個(gè)字符。 范圍:高字節(jié)從81到FE,低字節(jié)從40到FE。 GB18030字符集 作用:它解決了中文、日文、朝鮮語(yǔ)等的編碼,兼容GBK。 位數(shù):它采用變字節(jié)表示(1 ASCII,2,4字節(jié))。文字顯示流程文字顯示流程 應(yīng)用程序的字符串 ,按應(yīng)用的正確的字符集,轉(zhuǎn)變?yōu)椴僮飨到y(tǒng)內(nèi)碼,(例如ansi 內(nèi)碼, 現(xiàn)代操作系統(tǒng)基本都是unicode (utf16)內(nèi)碼)。(早

39、期還有一不依賴操作系統(tǒng)的BIOS代碼頁(yè)也被稱為OEM代碼頁(yè))代碼頁(yè)) 每個(gè)unicode 同font 下位圖一一對(duì)應(yīng)。 如果位圖不存在那么顯示 如果unicode解析出錯(cuò),那么ascii對(duì)應(yīng) 3f (?), 其他對(duì)應(yīng) ufffd. base64 Base64是一種基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的表示方法。由于2的6次方等于64,所以每6個(gè)比特為一個(gè)單元,對(duì)應(yīng)某個(gè)可打印字符。三個(gè)字節(jié)有24個(gè)比特,對(duì)應(yīng)于4個(gè)Base64單元,即3個(gè)字節(jié)需要用4個(gè)可打印字符來(lái)表示。它可用來(lái)作為電子郵件的傳輸編碼。在Base64中的可打印字符包括字母A-Z、a-z、數(shù)字0-9,這樣共有62個(gè)字符, 還有兩個(gè)是“

40、+”和“/”Base 64 等號(hào)等號(hào) 如果要編碼的字節(jié)數(shù)不能被3整除,最后會(huì)多出1個(gè)或2個(gè)字節(jié),那么可以使用下面的方法進(jìn)行處理:先使用0字節(jié)值在末尾補(bǔ)足,使其能夠被3整除,然后再進(jìn)行base64的編碼。在編碼后的base64文本后加上一個(gè)或兩個(gè)=號(hào),代表補(bǔ)足的字節(jié)數(shù)。也就是說(shuō),當(dāng)最后剩余一個(gè)八位字節(jié)(一個(gè)byte)時(shí),最后一個(gè)6位的base64字節(jié)塊有四位是0值,最后附加上兩個(gè)等號(hào);如果最后剩余兩個(gè)八位字節(jié)(2個(gè)byte)時(shí),最后一個(gè)6位的base字節(jié)塊有兩位是0值,最后附加一個(gè)等號(hào)。Base 64 索引表索引表數(shù)值字符 數(shù)值字符 數(shù)值字符 數(shù)值字符0A16Q32g48w1B17R33h49x

41、2C18S34i50y3D19T35j51z4E20U36k5205F21V37l5316G22W38m5427H23X39n5538I24Y40o5649J25Z41p57510K26a42q58611L27b43r59712M28c44s60813N29d45t61914O30e46u62+15P31f47v63/urlencode 針對(duì)get請(qǐng)求中的參數(shù)名和參數(shù)值:可能因?yàn)榫幋a以及特殊字符引起的錯(cuò)誤。而進(jìn)行的一個(gè)編碼。對(duì)于中文,轉(zhuǎn)換為16進(jìn)制的表示發(fā),每個(gè)字節(jié)前用%分隔。Eg : 中國(guó)URLEncoder.encode(中國(guó), UTF-8) =%E4%B8%AD%E5%9B%BDURLEncoder.encode(中國(guó), “GBK) =%D6%D0%B9%FA空格!#$%+:=%3F%20%21%23%24%25%2B%40%3A%3D?u

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論