基本知識
字符集(也稱字元集,Character Set)就是字符編碼表(codepage),一個字符不論英文、中文、韓文等在計算機系統(tǒng)內(nèi)存或硬盤中通過二進制的字節(jié)(Byte)保存,這個二進制的編碼就是字符編碼(也稱內(nèi)碼),字符集就是字符與內(nèi)碼的對應(yīng)(映射)表。
因為多國語言的原因,就出現(xiàn)了根據(jù)本國語言制作的字符集。如使用最廣泛的ASCII編碼,由美國國家標準局(即ANSI)制定,適用于所有拉丁、英文字符。中國大陸使用GB2312,GBK,GB18030等字符集,這些字符集包含所有漢字字符的內(nèi)碼,其中GBK,GB18030稱為大字符集,對繁體中文也進行了編碼。香港、臺灣、澳門地區(qū)使用Big5編碼,Big5收錄了繁體中文(有些繁體與中國大陸繁體字符有差異)的編碼,不包含簡體中文的字符編碼。韓文使用euc-kr的字符集,韓文中也有很多漢字,所以字符集包括很多漢字字符的編碼。其他如日文、俄文等都有自己國家制定的字符集,用來保證計算機系統(tǒng)能正確顯示本國的語言文字。不同語言的字符集不具有通用性,ASCII字符集沒有制定中文字符的編碼,GB2312沒有制定韓文字符的編碼,Big5沒有制定簡體中文字符的編碼,針對這種不兼容性,官方發(fā)布了Unicode(進一步優(yōu)化的UTF7,UTF8,UTF16等)字符集,對每一種語言的每個字符制定了統(tǒng)一且唯一的內(nèi)碼,滿足跨語言、跨平臺的字符解碼和轉(zhuǎn)換處理。
字符集編碼(16進制)示例:
字符/字符集 |
GBK |
Euc-kr |
UTF8 |
UTF16 |
物流 |
ce-ef ,c1-f7 |
da-aa,d7-b5 |
e7-89-a9,e6-b5-81 |
72-69,6d-41 |
?? |
無 |
bb-ef ,bc-ba |
ec-82-bc,ec-84-b1 |
c0-bc,c1-31 |
注:
1) 字符“??”在韓文字符集Euc-kr中的編碼是bb-ef-bc-ba,在GBK字符集中是沒有“??”這兩個字符的,也就是說bb-ef-bc-ba在Euc-kr與GBK編碼對照表中是沒有記錄的,如果你硬是要GBK字符集來對“??”作出解釋(解碼),那GBK就用字符“?”(因韓文字符是兩個字節(jié),所以使用全角?)代替,全角?的編碼在GBK中是a3-bf。
2) 漢字“物流”字符在Euc-kr中的編碼是da-aa,d7-b5,這說明韓文字符集中包含了部分漢字的編碼,當然這個編碼與GBK字符集中“物流”兩個字符的編碼(ce-ef ,c1-f7)是不同的,用GBK去解釋韓文字符集中“物流”兩個字符,顯示的結(jié)果肯定不是“物流”兩個字符。同樣的,在GBK中很多繁體中文字符的編碼與BIG5中相同繁體中文的字符編碼也是不同的,例如你在簡體中文環(huán)境開發(fā)應(yīng)用程序時,窗體控件使用繁體中文表示,但是在繁體OS運行應(yīng)用程序,控件上的繁體中文變成了亂碼或?,原因就是不同字符集同樣字符的編碼是不同的,解決這個問題的方法就是將應(yīng)用程序使用unicode編碼保存,告訴操作系統(tǒng)使用unicode字符集對你的應(yīng)用程序中的字符進行解碼。
Windows操作系統(tǒng)(OS)的字符集:不同語言的OS的默認字符集是不一樣的。英文OS使用ASCII字符集作為系統(tǒng)的字符集,簡體使用GB2312,繁體使用Big5(在VB.NET中,可用System.Text.Encoding.Default.EncodingName檢查OS的字符集)。Windows系統(tǒng)本身對系統(tǒng)默認的字符集有很好的支持,但是安裝在OS上的應(yīng)用程序卻不一定這樣。例如,在一個簡體中文操作系統(tǒng)上安裝了韓文版的某個應(yīng)用程序,這個應(yīng)用程序在開發(fā)時使用的是euc-kr字符集編碼。因為OS默認的處理非Unicode程序的字符集是GB2312,在 GB2312字符集并未對任何韓文字符進行編碼,在GB2312內(nèi)找不到任何一個韓文字符的內(nèi)碼,找不到只能以“?”代替這個字符,對應(yīng)的編碼變成了“?”的編碼,例如:“??”這兩個韓文字符在程序運行時顯示的是“?”。解決這個問題,有三種方法:1,該韓文應(yīng)用程序使用Unicode編碼保存。在簡體環(huán)境運行時,OS使用Unicode字符集解碼,只要系統(tǒng)安裝韓文字體,就可正常顯示韓文;2,將OS處理非Unicode程序使用的字符集改為euc-kr,支持韓文應(yīng)用程序的解碼(在control panel->Regional and Language Options 修改);3,安裝微軟的AppLocale工具,指定該韓文應(yīng)用程序運行時使用euc-kr的字符集。
為避免亂碼,統(tǒng)一將字符集(操作系統(tǒng)字符集、Oracle客戶端字符集、Oracle數(shù)據(jù)庫字符集)設(shè)置為與Oracle 數(shù)據(jù)庫的字符集一致,
操作系統(tǒng)字符集:
方法一、
開始—運行,輸入cmd,輸入chcp命令

在控制面板—區(qū)域和欲予選項,查看本系統(tǒng)活動的代碼頁對應(yīng)的字符集
方法二、
開始—運行,輸入cmd,


Oracle客戶端字符集:
查看及修改:開始—運行,輸入regedit,找到
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1
將值修改為“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”

Oracle數(shù)據(jù)庫字符集:
安裝數(shù)據(jù)庫時設(shè)置
查詢語句:select userenv('language') from dual;
posted on 2012-06-15 14:03
wilsonyq 閱讀(382)
評論(0) 編輯 收藏 所屬分類:
DB