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
          主站蜘蛛池模板: 吉安市| 苍梧县| 崇信县| 即墨市| 台东县| 广河县| 安义县| 鲜城| 茶陵县| 公安县| 丹阳市| 新蔡县| 长武县| 新宾| 金川县| 弥勒县| 隆德县| 永靖县| 昭通市| 连平县| 金阳县| 句容市| 迁西县| 东乡族自治县| 内丘县| 金昌市| 香格里拉县| 南溪县| 牙克石市| 滁州市| 清涧县| 余干县| 松原市| 神农架林区| 莲花县| 武胜县| 乐至县| 九寨沟县| 台安县| 定远县| 灵璧县|