新聞中心
亂碼產(chǎn)生的原因:
計(jì)算機(jī)中儲(chǔ)存的信息都是用二進(jìn)制數(shù)表示的;而我們?cè)谄聊簧峡吹降挠⑽摹h字等字符是二進(jìn)制數(shù)轉(zhuǎn)換之后的結(jié)果。通俗的說(shuō),按照何種規(guī)則將字符存儲(chǔ)在計(jì)算機(jī)中,如'a'用什么表示,稱為"編碼";反之,將存儲(chǔ)在計(jì)算機(jī)中的二進(jìn)制數(shù)解析顯示出來(lái),稱為"解碼",如同密碼學(xué)中的加密和解密。在解碼過(guò)程中,如果使用了錯(cuò)誤的解碼規(guī)則,則導(dǎo)致'a'解析成'b'或者亂碼。

創(chuàng)新互聯(lián)公司是專(zhuān)業(yè)的固原網(wǎng)站建設(shè)公司,固原接單;提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行固原網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
字符集(Charset):是一個(gè)系統(tǒng)支持的所有抽象字符的集合。字符是各種文字和符號(hào)的總稱,包括各國(guó)家文字、標(biāo)點(diǎn)符號(hào)、圖形符號(hào)、數(shù)字等。
字符編碼(Character Encoding):是一套法則,使用該法則能夠?qū)ψ匀徽Z(yǔ)言的字符的一個(gè)集合(如字母表或音節(jié)表),與其他東西的一個(gè)集合(如號(hào)碼或電脈沖)進(jìn)行配對(duì)。即在符號(hào)集合與數(shù)字系統(tǒng)之間建立對(duì)應(yīng)關(guān)系,它是信息處理的一項(xiàng)基本技術(shù)。通常人們用符號(hào)集合(一般情況下就是文字)來(lái)表達(dá)信息。而以計(jì)算機(jī)為基礎(chǔ)的信息處理系統(tǒng)則是利用元件(硬件)不同狀態(tài)的組合來(lái)存儲(chǔ)和處理信息的。元件不同狀態(tài)的組合能代表數(shù)字系統(tǒng)的數(shù)字,因此字符編碼就是將符號(hào)轉(zhuǎn)換為計(jì)算機(jī)可以接受的數(shù)字系統(tǒng)的數(shù),稱為數(shù)字代碼。
UTF-8:
-
UTF-8(8-bit Unicode Transformation Format)是一種針對(duì)Unicode的可變長(zhǎng)度字符編碼(定長(zhǎng)碼),也是一種前綴碼。它可以用來(lái)表示Unicode標(biāo)準(zhǔn)中的任何字符,且其編碼中的第一個(gè)字節(jié)仍與ASCII兼容,這使得原來(lái)處理ASCII字符的軟件無(wú)須或只須做少部份修改,即可繼續(xù)使用。因此,它逐漸成為電子郵件、網(wǎng)頁(yè)及其他存儲(chǔ)或傳送文字的應(yīng)用中,優(yōu)先采用的編碼?;ヂ?lián)網(wǎng)工程工作小組(IETF)要求所有互聯(lián)網(wǎng)協(xié)議都必須支持UTF-8編碼。
UTF-8使用一至四個(gè)字節(jié)為每個(gè)字符編碼:
- 128個(gè)US-ASCII字符只需一個(gè)字節(jié)編碼(Unicode范圍由U+0000至U+007F)。
- 帶有附加符號(hào)的拉丁文、希臘文、西里爾字母、亞美尼亞語(yǔ)、希伯來(lái)文、阿拉伯文、敘利亞文及它拿字母則需要二個(gè)字節(jié)編碼(Unicode范圍由U+0080至U+07FF)。
- 其他基本多文種平面(BMP)中的字符(這包含了大部分常用字)使用三個(gè)字節(jié)編碼。
- 其他極少使用的Unicode輔助平面的字符使用四字節(jié)編碼。
在處理經(jīng)常會(huì)用到的ASCII字符方面非常有效。在處理擴(kuò)展的拉丁字符集方面也不比UTF-16差。對(duì)于中文字符來(lái)說(shuō),比UTF-32要好。同時(shí),(在這一條上你得相信我,因?yàn)槲也淮蛩憬o你展示它的數(shù)學(xué)原理。)由位操作的天性使然,使用UTF-8不再存在字節(jié)順序的問(wèn)題了。一份以u(píng)tf-8編碼的文檔在不同的計(jì)算機(jī)之間是一樣的比特流。
總體來(lái)說(shuō),在Unicode字符串中不可能由碼點(diǎn)數(shù)量決定顯示它所需要的長(zhǎng)度,或者顯示字符串之后在文本緩沖區(qū)中光標(biāo)應(yīng)該放置的位置;組合字符、變寬字體、不可打印字符和從右至左的文字都是其歸因。所以盡管在UTF-8字符串中字符數(shù)量與碼點(diǎn)數(shù)量的關(guān)系比UTF-32更為復(fù)雜,在實(shí)際中很少會(huì)遇到有不同的情形。
優(yōu)點(diǎn)
- UTF-8是ASCII的一個(gè)超集。因?yàn)橐粋€(gè)純ASCII字符串也是一個(gè)合法的UTF-8字符串,所以現(xiàn)存的ASCII文本不需要轉(zhuǎn)換。為傳統(tǒng)的擴(kuò)展ASCII字符集設(shè)計(jì)的軟件通??梢圆唤?jīng)修改或很少修改就能與UTF-8一起使用。
- 使用標(biāo)準(zhǔn)的面向字節(jié)的排序例程對(duì)UTF-8排序?qū)a(chǎn)生與基于Unicode代碼點(diǎn)排序相同的結(jié)果。(盡管這只有有限的有用性,因?yàn)樵谌魏翁囟ㄕZ(yǔ)言或文化下都不太可能有仍可接受的文字排列順序。)
- UTF-8和UTF-16都是可擴(kuò)展標(biāo)記語(yǔ)言文檔的標(biāo)準(zhǔn)編碼。所有其它編碼都必須通過(guò)顯式或文本聲明來(lái)指定。
- 任何面向字節(jié)的字符串搜索算法都可以用于UTF-8的數(shù)據(jù)(只要輸入僅由完整的UTF-8字符組成)。但是,對(duì)于包含字符記數(shù)的正則表達(dá)式或其它結(jié)構(gòu)必須小心。
- UTF-8字符串可以由一個(gè)簡(jiǎn)單的算法可靠地識(shí)別出來(lái)。就是,一個(gè)字符串在任何其它編碼中表現(xiàn)為合法的UTF-8的可能性很低,并隨字符串長(zhǎng)度增長(zhǎng)而減小。舉例說(shuō),字符值C0,C1,F5至FF從來(lái)沒(méi)有出現(xiàn)。為了更好的可靠性,可以使用正則表達(dá)式來(lái)統(tǒng)計(jì)非法過(guò)長(zhǎng)和替代值(可以查看W3 FAQ: Multilingual Forms上的驗(yàn)證UTF-8字符串的正則表達(dá)式)。
缺點(diǎn)
因?yàn)槊總€(gè)字符使用不同數(shù)量的字節(jié)編碼,所以尋找串中第N個(gè)字符是一個(gè)O(N)復(fù)雜度的操作 — 即,串越長(zhǎng),則需要更多的時(shí)間來(lái)定位特定的字符。同時(shí),還需要位變換來(lái)把字符編碼成字節(jié),把字節(jié)解碼成字符。
配置字符集:
CentOS6.x 字符集配置文件在/etc/syscconfig/i18n;
CentOS7.x 字符集配置文件在/etc/locale.conf;
查看已經(jīng)安裝的語(yǔ)言包:
|
# locale -a aa_DJ ... ... |
安裝中文字符集:
CentOS6.x:
| #yum groupinstall chinese-support |
注意CentO S7與6不一樣;
|
#yum install kde-l10n-Chinese #yum reinstall glibc-common |
查看當(dāng)前的字符集:
方法一:
| # echo $LANG zh_CN.UTF-8 |
方法二:
| # locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8"# locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL= LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8"ENTIFICATION="zh_CN.UTF-8" LC_A |
安裝完成之后通過(guò)vi命令修改配置文件:
這個(gè)是由中文字符集改為英文字符集,沒(méi)辦法中文字符集還是存在亂碼問(wèn)題;
| #vi /etc/locale.conf # LANG="zh_CN.UTF-8" LANG="en_US.UTF-8" |
改完后需要使用source命令是配置文件生效:
| #source /etc/locale.conf |
檢查:
|
# locale |
臨時(shí)改變字符集命令:
|
#LANG="想要使用的字符集" #LANG="LANG=en_US.UTF-8" |
也可以把字符集的環(huán)境變量寫(xiě)到profile
| # vim /etc/profile |
注意這個(gè)需要利用#source /etc/profile使文件生效。
根據(jù)用戶設(shè)置字符集,需要更改用戶家目錄下的 .bash_profile ,在最后一行添加字符集就可以了
|
# vim .bash_profile LANG="LANG=en_US.UTF-8" |
使用遠(yuǎn)程連接工具時(shí)注意把字符集調(diào)試成與系統(tǒng)字符集一致。
當(dāng)前題目:CentOS7.5修改字符集
URL標(biāo)題:http://www.dlmjj.cn/article/dhhohge.html


咨詢
建站咨詢
