国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

淺析亂碼的產(chǎn)生原因及消除技術(shù)

2014-07-14 02:21:05余江平王偉
中國科技縱橫 2014年6期
關(guān)鍵詞:字符集亂碼

余江平+王偉

【摘 要】 用戶在瀏覽網(wǎng)頁和進(jìn)行協(xié)議分析的過程中,經(jīng)常會遇到出現(xiàn)亂碼的情況,亂碼問題阻礙了正常工作。本文首先闡述了字符集和字符編碼的基本原理,接下來介紹了審計(jì)系統(tǒng)里面協(xié)議分析、報(bào)表生成等行為中亂碼產(chǎn)生的原因,接下來介紹了消除亂碼的辦法。

【關(guān)鍵詞】 字符編碼 字符集 審計(jì)系統(tǒng) 亂碼

1 引言

計(jì)算機(jī)中數(shù)據(jù)信息可分為數(shù)值和非數(shù)值信息。非數(shù)值信息包括了字母、各種控制符號、圖形符號等,它們都以二進(jìn)制編碼方式存入計(jì)算機(jī)并得以處理。我們在屏幕上看到的英文、漢字等字符是二進(jìn)制數(shù)轉(zhuǎn)換之后的結(jié)果。通俗的說,按照何種規(guī)則將各種字符集文字存儲在計(jì)算機(jī)中,如'a'用什么表示,“你好”用什么表示,稱為"編碼";反之,將存儲在計(jì)算機(jī)中的二進(jìn)制數(shù)解析顯示出來,稱為"解碼",如果使用了錯(cuò)誤的解碼規(guī)則,則可能導(dǎo)致亂碼。

2 字符集和字符編碼

2.1 概念

首先介紹相關(guān)概念。字符,即抽象意義上的一個(gè)符號。例如'1', '我', 'a', ‘%,'$', '¥', 。。。。字節(jié),即計(jì)算機(jī)中的數(shù)據(jù)的存儲單元,是一個(gè)8位的二進(jìn)制數(shù)。 例如0x01, 0x12,。。。。字符集,即多個(gè)字符的集合,而這些字符可能是各國家文字、標(biāo)點(diǎn)符號、圖形符號、數(shù)字等。字符編碼:規(guī)定每個(gè)“字符”分別用一個(gè)字節(jié)還是多個(gè)字節(jié)存儲,用哪些字節(jié)什么形式來存儲。

編碼(encoding)和字符集不同。字符集只是字符的集合,不一定適合作網(wǎng)絡(luò)傳送、處理,有時(shí)須經(jīng)編碼(encode)后才能應(yīng)用如Unicode可依不同需要以UTF-8、UTF-16、UTF-32等方式編碼。

2.2 常見的字符集合對應(yīng)字符編碼

常見字符集名稱:ASCII字符集、Unicode字符集等。計(jì)算機(jī)要準(zhǔn)確的處理各種字符集文字,需要進(jìn)行字符編碼,以便計(jì)算機(jī)能夠識別和存儲各種文字。

2.2.1 ASCII字符集與ASCII編碼

ASCII(American Standard Code for Information Interchange,美國信息交換標(biāo)準(zhǔn)代碼)它主要用于顯示現(xiàn)代英語,它是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng)。

ASCII編碼:將ASCII字符集轉(zhuǎn)換為計(jì)算機(jī)可以接受的數(shù)字系統(tǒng)的數(shù)的規(guī)則。使用7位(bits)表示一個(gè)字符,共128字符;但是7位編碼的字符集只能支持128個(gè)字符為了表示更多的常用字符對ASCII進(jìn)行了擴(kuò)展,ASCII擴(kuò)展字符集使用8位(bits)表示一個(gè)字符,共256字符 詳細(xì)可以查詢ASCII字符代碼表,其缺點(diǎn)是只能顯示現(xiàn)代英語單字節(jié)字符,一個(gè)字節(jié)(8位)存放一個(gè)字符。

2.2.2 GB2312等字符集和ANSI編碼

為使計(jì)算機(jī)支持更多語言,通常使用0x800~xFF范圍的2個(gè)字節(jié)來表示1個(gè)字符。比如漢字'中'在中文OS中,使用[0xD6,0xD0]這兩個(gè)字節(jié)存儲。

不同的國家和地區(qū)制定了不同的標(biāo)準(zhǔn),由此產(chǎn)生了GB2312,BIG5,JIS等各自的編碼標(biāo)準(zhǔn)。這些使用2個(gè)字節(jié)來代表一個(gè)字符的各種漢字延伸編碼方式,稱為ANSI編碼。在簡體中文系統(tǒng)下,ANSI 編碼代表GB2312編碼,在日文操作系統(tǒng)下,ANSI編碼代表JIS編碼。

2.2.3 UNICODE字符集和utf-8 utf-16UTF-32編碼

計(jì)算機(jī)存放字符串時(shí),改為存放每個(gè)字符在UNICODE字符集中的序號。目前計(jì)算機(jī)一般使用2個(gè)字節(jié)(16位)來存放一個(gè)序號(DBCS),因此,這種方式存放的字符也被稱作寬字節(jié)字符。例如"中文123"占五個(gè)序號,10個(gè)字節(jié)

我們知道,ASCII字符是單個(gè)字節(jié)的,比如“A”的ASCII是65。而Unicode是雙字節(jié)的,比如“A”的Unicode是0065,這就造成了一個(gè)非常大的問題:以前處理ASCII的那套機(jī)制不能被用來處理Unicode了。

另一個(gè)更加嚴(yán)重的問題是,C語言使用'\0'作為字符串結(jié)尾,而Unicode里恰恰有很多字符都有一個(gè)字節(jié)為0,這樣一來,C語言的字符串函數(shù)將無法正常處理Unicode,所以就產(chǎn)生了UTF,UTF= UCS Transformation Format,即UCS轉(zhuǎn)換(傳輸)格式。它是將Unicode編碼規(guī)則和計(jì)算機(jī)的實(shí)際編碼對應(yīng)起來的一個(gè)規(guī)則?,F(xiàn)在流行的UTF有2種:UTF-8和UTF-16,都是Unicode的編碼實(shí)現(xiàn)。

UTF-8兼容ASCII。UTF-8是變長的,將Unicode編碼為00000000-0000007F的字符,用單個(gè)字節(jié)來表示;00000080-000007FF的字符用兩個(gè)字節(jié)表示;00000800-0000FFFF的字符用3字節(jié)表示,Utf-16不兼容ASCII。

3 產(chǎn)生亂碼的可能原因以及解決方法

(1)取文本文件時(shí),如果將“字節(jié)串”簡單地作為單字節(jié)字符串,采用每“一個(gè)字節(jié)”就是“一個(gè)字符”的方法進(jìn)行轉(zhuǎn)化 那可能就會出現(xiàn)亂碼。

解決方法:應(yīng)該將“字節(jié)串”作為ANSI字符串,采用適當(dāng)?shù)木幋a來得到UNICODE字符串,有可能“多個(gè)字節(jié)”才能得到“一個(gè)字符”。

(2)協(xié)議分析過程中,例如http中與字符集和字符編碼相關(guān)的消息頭是Accept-Charset:瀏覽器申明自己接收的字符集和字符編碼如gb2312,utf-8。Content-Type:WEB服務(wù)器告訴瀏覽器自己響應(yīng)的對象的類型和字符集。例如:Content-Type:text/html;charset='gb2312',所以是根據(jù)這兩個(gè)進(jìn)行編碼轉(zhuǎn)換的。

(3)抓取數(shù)據(jù)包時(shí)候可能遇到的編碼。URL編碼:URL編碼遵循每對name/value,由&;符分每對來自表單的name/value由=符分開任何特殊的字符。Base64編碼:Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)編碼的編碼方式之一,Base64編碼可用于在HTTP環(huán)境下傳遞較長的標(biāo)識信息,在Xml格式文件明顯有使用到。

4 結(jié)語

本文闡述了字符集和字符編碼的基本原理,介紹了審計(jì)系統(tǒng)里面協(xié)議分析、報(bào)表生成等行為中亂碼產(chǎn)生的原因,介紹了消除亂碼的辦法。

參考文獻(xiàn):

[1]徐新華.字符編碼詳解. http://polaris.blog.51cto.com/1146394/377468

[2]吳秦.字符集和字符編碼. http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html

[3]字符,字節(jié)和編碼. http://www.regexlab.com/zh/encoding.htmendprint

猜你喜歡
字符集亂碼
對癥下藥解決多種亂碼難題
這些真的不是亂碼,是漢字
MySQL數(shù)據(jù)庫字符集的問題研究
ORACLE字符集問題的分析
ORACLE數(shù)據(jù)庫字符集問題及解決方法
醫(yī)院信息系統(tǒng)Oracle數(shù)據(jù)庫中導(dǎo)入數(shù)據(jù)中文亂碼的解決技術(shù)
.Net框架聯(lián)合Oracle字符集問題研究
炫邁:用神奇亂碼勾引你視線
字符集研究
如何解決Tomcat的亂碼
塔城市| 内黄县| 凤台县| 汉寿县| 沧源| 饶平县| 东光县| 苍溪县| 海城市| 吉安市| 台东县| 永吉县| 闽侯县| 贵溪市| 林州市| 盐源县| 通许县| 屏南县| 霞浦县| 虹口区| 四子王旗| 马鞍山市| 肇源县| 凉山| 罗山县| 石台县| 江达县| 嵊州市| 甘肃省| 修水县| 丰原市| 韶山市| 台中市| 樟树市| 浪卡子县| 沁水县| 泗阳县| 镶黄旗| 阿鲁科尔沁旗| 蕉岭县| 梅州市|