posts - 2,  comments - 0,  trackbacks - 0

          基本知識

              字符集(也稱字元集,Character Set)就是字符編碼表(codepage),一個字符不論英文、中文、韓文等在計算機系統內存或硬盤中通過二進制的字節(Byte)保存,這個二進制的編碼就是字符編碼(也稱內碼),字符集就是字符與內碼的對應(映射)表。

              因為多國語言的原因,就出現了根據本國語言制作的字符集。如使用最廣泛的ASCII編碼,由美國國家標準局(ANSI)制定,適用于所有拉丁、英文字符。中國大陸使用GB2312,GBK,GB18030等字符集,這些字符集包含所有漢字字符的內碼,其中GBK,GB18030稱為大字符集,對繁體中文也進行了編碼。香港、臺灣、澳門地區使用Big5編碼,Big5收錄了繁體中文(有些繁體與中國大陸繁體字符有差異)的編碼,不包含簡體中文的字符編碼。韓文使用euc-kr的字符集,韓文中也有很多漢字,所以字符集包括很多漢字字符的編碼。其他如日文、俄文等都有自己國家制定的字符集,用來保證計算機系統能正確顯示本國的語言文字。不同語言的字符集不具有通用性,ASCII字符集沒有制定中文字符的編碼,GB2312沒有制定韓文字符的編碼,Big5沒有制定簡體中文字符的編碼,針對這種不兼容性,官方發布了Unicode(進一步優化的UTF7,UTF8,UTF16等)字符集,對每一種語言的每個字符制定了統一且唯一的內碼,滿足跨語言、跨平臺的字符解碼和轉換處理。

           

          字符集編碼(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-baEuc-krGBK編碼對照表中是沒有記錄的,如果你硬是要GBK字符集來對“??”作出解釋(解碼),那GBK就用字符“?”(因韓文字符是兩個字節,所以使用全角?)代替,全角?的編碼在GBK中是a3-bf

           

          2) 漢字“物流”字符在Euc-kr中的編碼是da-aa,d7-b5,這說明韓文字符集中包含了部分漢字的編碼,當然這個編碼與GBK字符集中“物流”兩個字符的編碼(ce-ef ,c1-f7)是不同的,用GBK去解釋韓文字符集中“物流”兩個字符,顯示的結果肯定不是“物流”兩個字符。同樣的,在GBK中很多繁體中文字符的編碼與BIG5中相同繁體中文的字符編碼也是不同的,例如你在簡體中文環境開發應用程序時,窗體控件使用繁體中文表示,但是在繁體OS運行應用程序,控件上的繁體中文變成了亂碼或?,原因就是不同字符集同樣字符的編碼是不同的,解決這個問題的方法就是將應用程序使用unicode編碼保存,告訴操作系統使用unicode字符集對你的應用程序中的字符進行解碼。

              Windows操作系統(OS)的字符集:不同語言的OS的默認字符集是不一樣的。英文OS使用ASCII字符集作為系統的字符集,簡體使用GB2312,繁體使用Big5(在VB.NET中,可用System.Text.Encoding.Default.EncodingName檢查OS的字符集)。Windows系統本身對系統默認的字符集有很好的支持,但是安裝在OS上的應用程序卻不一定這樣。例如,在一個簡體中文操作系統上安裝了韓文版的某個應用程序,這個應用程序在開發時使用的是euc-kr字符集編碼。因為OS默認的處理非Unicode程序的字符集是GB2312, GB2312字符集并未對任何韓文字符進行編碼,在GB2312內找不到任何一個韓文字符的內碼,找不到只能以“?”代替這個字符,對應的編碼變成了“?”的編碼,例如:“??”這兩個韓文字符在程序運行時顯示的是“?”。解決這個問題,有三種方法:1,該韓文應用程序使用Unicode編碼保存。在簡體環境運行時,OS使用Unicode字符集解碼,只要系統安裝韓文字體,就可正常顯示韓文;2,將OS處理非Unicode程序使用的字符集改為euc-kr,支持韓文應用程序的解碼(在control panel->Regional and Language Options 修改);3,安裝微軟的AppLocale工具,指定該韓文應用程序運行時使用euc-kr的字符集。


          為避免亂碼,統一將字符集(操作系統字符集、Oracle客戶端字符集、Oracle數據庫字符集)設置為與Oracle 數據庫的字符集一致,

           

          操作系統字符集

          方法一、

          開始運行,輸入cmd,輸入chcp命令


           

          在控制面板區域和欲予選項,查看本系統活動的代碼頁對應的字符集

           

          方法二、

          開始運行,輸入cmd

           






          Oracle
          客戶端字符集

          查看及修改:開始運行,輸入regedit找到

          HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1

           

          將值修改為“SIMPLIFIED CHINESE_CHINA.ZHS16GBK



          Oracle數據庫字符集

          安裝數據庫時設置

          查詢語句:select userenv('language') from dual;


           

           

          posted on 2012-06-15 14:03 wilsonyq 閱讀(384) 評論(0)  編輯  收藏 所屬分類: DB
          主站蜘蛛池模板: 民勤县| 富裕县| 山丹县| 穆棱市| 南木林县| 罗平县| 宁河县| 达州市| 北碚区| 巴彦县| 靖江市| 平湖市| 衡东县| 威海市| 江孜县| 昭通市| 康定县| 札达县| 双流县| 贡觉县| 永州市| 新安县| 晋江市| 特克斯县| 恩平市| 镇平县| 塔河县| 刚察县| 芜湖市| 德格县| 佛学| 诸暨市| 阳东县| 文水县| 山阳县| 斗六市| 呼图壁县| 灵武市| 金乡县| 渭源县| 靖州|