none
有關中文編碼的問題 RRS feed

解答

  •  Meng-Hsuan Cheng 寫信:

     

    IsDBCSLeadByte  可以確定雙字元字集 但雙字元字集不一定全部都是中文

    IsDBCSLeadByteEx ( uint codepage ,byte  bTestChar) 這個比較正確




    TO   Meng-Hsuan Cheng  :

    您說得沒錯  

    EX:

    IsDBCSLeadByteEx (950 , te[ i ] );
    2007年12月2日 上午 08:09

所有回覆

  •  

    程式碼區塊

    System.Text.Encoding.GetEncoding(950);

     

     

    // 950 is code page of Big-5

    2007年11月29日 上午 06:14
  • 取得系統所有支援的 Encoding

    程式碼區塊


    EncodingInfo[] encInfos = Encoding.GetEncodings();

     

    foreach (EncodingInfo info in encInfos)
    {
        // String.Format("{0}\t{1}\t{2}\r\n", info.CodePage, info.Name, info.DisplayName);
    }

     

     

    列表如下:

    程式碼區塊

     

    37 IBM037 IBM EBCDIC (美國-加拿大)
    437 IBM437 OEM 美國
    500 IBM500 IBM EBCDIC (國際)
    708 ASMO-708 阿拉伯文 (ASMO 708)
    720 DOS-720 阿拉伯文 (DOS)
    737 ibm737 希臘文 (DOS)
    775 ibm775 波羅的海文 (DOS)
    850 ibm850 西歐語系 (DOS)
    852 ibm852 中歐語系 (DOS)
    855 IBM855 OEM 斯拉夫文
    857 ibm857 土耳其文 (DOS)
    858 IBM00858 OEM 多語系拉丁文 I
    860 IBM860 葡萄牙文 (DOS)
    861 ibm861 冰島文 (DOS)
    862 DOS-862 希伯來文 (DOS)
    863 IBM863 加拿大法文 (DOS)
    864 IBM864 阿拉伯文 (864)
    865 IBM865 北歐字母 (DOS)
    866 cp866 斯拉夫文 (DOS)
    869 ibm869 希臘文,現代 (DOS)
    870 IBM870 IBM EBCDIC (多語系拉丁文 2)
    874 windows-874 泰文 (Windows)
    875 cp875 IBM EBCDIC (希臘現代)
    932 shift_jis 日文 (Shift-JIS)
    936 gb2312 簡體中文 (GB2312)
    949 ks_c_5601-1987 韓文
    950 big5 繁體中文 (Big5)
    1026 IBM1026 IBM EBCDIC (土耳其拉丁文 5)
    1047 IBM01047 IBM 拉丁文 1
    1140 IBM01140 IBM EBCDIC (美國-加拿大-歐洲)
    1141 IBM01141 IBM EBCDIC (德國-歐洲)
    1142 IBM01142 IBM EBCDIC (丹麥-挪威-歐洲)
    1143 IBM01143 IBM EBCDIC (芬蘭-瑞典-歐洲)
    1144 IBM01144 IBM EBCDIC (義大利-歐洲)
    1145 IBM01145 IBM EBCDIC (西班牙-歐洲)
    1146 IBM01146 IBM EBCDIC (英國-歐洲)
    1147 IBM01147 IBM EBCDIC (法國-歐洲)
    1148 IBM01148 IBM EBCDIC (國際-歐洲)
    1149 IBM01149 IBM EBCDIC (冰島-歐洲)
    1200 utf-16 Unicode
    1201 unicodeFFFE Unicode (Big-Endian)
    1250 windows-1250 中歐語系 (Windows)
    1251 windows-1251 斯拉夫文 (Windows)
    1252 Windows-1252 西歐語系 (Windows)
    1253 windows-1253 希臘文 (Windows)
    1254 windows-1254 土耳其文 (Windows)
    1255 windows-1255 希伯來文 (Windows)
    1256 windows-1256 阿拉伯文 (Windows)
    1257 windows-1257 波羅的海文 (Windows)
    1258 windows-1258 越南文 (Windows)
    1361 Johab 韓文 (Johab)
    10000 macintosh 西歐語系 (Mac)
    10001 x-mac-japanese 日文 (Mac)
    10002 x-mac-chinesetrad 繁體中文 (Mac)
    10003 x-mac-korean 韓文 (Mac)
    10004 x-mac-arabic 阿拉伯文 (Mac)
    10005 x-mac-hebrew 希伯來文 (Mac)
    10006 x-mac-greek 希臘文 (Mac)
    10007 x-mac-cyrillic 斯拉夫文 (Mac)
    10008 x-mac-chinesesimp 簡體中文 (Mac)
    10010 x-mac-romanian 羅馬尼亞文 (Mac)
    10017 x-mac-ukrainian 烏克蘭文 (Mac)
    10021 x-mac-thai 泰文 (Mac)
    10029 x-mac-ce 中歐語系 (Mac)
    10079 x-mac-icelandic 冰島文 (Mac)
    10081 x-mac-turkish 土耳其文 (Mac)
    10082 x-mac-croatian 克羅埃西亞文 (Mac)
    12000 utf-32 Unicode (UTF-32)
    12001 utf-32BE Unicode (UTF-32 Big-Endian)
    20000 x-Chinese-CNS 繁體中文 (CNS)
    20001 x-cp20001 TCA 台灣
    20002 x-Chinese-Eten 繁體中文 (Eten)
    20003 x-cp20003 IBM5550 台灣
    20004 x-cp20004 TeleText 台灣
    20005 x-cp20005 Wang 台灣
    20105 x-IA5 西歐語系 (IA5)
    20106 x-IA5-German 德文 (IA5)
    20107 x-IA5-Swedish 瑞典文 (IA5)
    20108 x-IA5-Norwegian 挪威文 (IA5)
    20127 us-ascii US-ASCII
    20261 x-cp20261 T.61
    20269 x-cp20269 ISO-6937
    20273 IBM273 IBM EBCDIC (德國)
    20277 IBM277 IBM EBCDIC (丹麥-挪威)
    20278 IBM278 IBM EBCDIC (芬蘭-瑞典)
    20280 IBM280 IBM EBCDIC (義大利)
    20284 IBM284 IBM EBCDIC (西班牙)
    20285 IBM285 IBM EBCDIC (UK)
    20290 IBM290 IBM EBCDIC (日文片假名)
    20297 IBM297 IBM EBCDIC (法國)
    20420 IBM420 IBM EBCDIC (阿拉伯文)
    20423 IBM423 IBM EBCDIC (希臘文)
    20424 IBM424 IBM EBCDIC (希伯來文)
    20833 x-EBCDIC-KoreanExtended IBM EBCDIC (韓文擴充)
    20838 IBM-Thai IBM EBCDIC (泰國)
    20866 koi8-r 斯拉夫文 (KOI8-R)
    20871 IBM871 IBM EBCDIC (冰島)
    20880 IBM880 IBM EBCDIC (斯拉夫俄文)
    20905 IBM905 IBM EBCDIC (土耳其)
    20924 IBM00924 IBM 拉丁文 1
    20932 EUC-JP Japanese (JIS 0208-1990 和 0212-1990)
    20936 x-cp20936 簡體中文 (GB2312-80)
    20949 x-cp20949 韓文 Wansung
    21025 cp1025 IBM EBCDIC (斯拉夫塞爾維亞文-保加利亞文)
    21866 koi8-u 斯拉夫文 (KOI8-U)
    28591 iso-8859-1 西歐語系 (ISO)
    28592 iso-8859-2 中歐語系 (ISO)
    28593 iso-8859-3 拉丁文 3 (ISO)
    28594 iso-8859-4 波羅的海文 (ISO)
    28595 iso-8859-5 斯拉夫文 (ISO)
    28596 iso-8859-6 阿拉伯文 (ISO)
    28597 iso-8859-7 希臘文 (ISO)
    28598 iso-8859-8 希伯來文 (ISO-Visual)
    28599 iso-8859-9 土耳其文 (ISO)
    28603 iso-8859-13 愛沙尼亞文 (ISO)
    28605 iso-8859-15 拉丁文 9 (ISO)
    29001 x-Europa 歐洲
    38598 iso-8859-8-i 希伯來文 (ISO-Logical)
    50220 iso-2022-jp 日文 (JIS)
    50221 csISO2022JP 日文 (JIS-Allow 1 byte Kana)
    50222 iso-2022-jp 日文 (JIS-Allow 1 byte Kana - SO/SI)
    50225 iso-2022-kr 韓文 (ISO)
    50227 x-cp50227 簡體中文 (ISO-2022)
    51932 euc-jp 日文 (EUC)
    51936 EUC-CN 簡體中文 (EUC)
    51949 euc-kr 韓文 (EUC)
    52936 hz-gb-2312 簡體中文 (HZ)
    54936 GB18030 簡體中文 (GB18030)
    57002 x-iscii-de ISCII 梵文語系
    57003 x-iscii-be ISCII 孟加拉文
    57004 x-iscii-ta ISCII 坦米爾文
    57005 x-iscii-te ISCII 特拉古文
    57006 x-iscii-as ISCII 阿薩姆文
    57007 x-iscii-or ISCII 歐利亞文
    57008 x-iscii-ka ISCII 坎那達文
    57009 x-iscii-ma ISCII 馬來亞拉姆文
    57010 x-iscii-gu ISCII 古吉拉特文
    57011 x-iscii-pa ISCII 旁遮普語
    65000 utf-7 Unicode (UTF-7)
    65001 utf-8 Unicode (UTF-8)

     

     


    ----
    From: Will
    Blog: http://blog.miniasp.com/
    記載著 Will 在網路世界的學習心得與技術分享

    2007年11月29日 上午 07:34
  • 我主要的問題是說
    如果我輸入一個字樣(例如:我),那我要如何取得,這個字的 Big-5 碼
    謝謝

    上面所說的方法,我會試試看的
    謝謝
    2007年11月30日 上午 05:53

  • 程式碼區塊

     

            string strText = "我是誰";

     

            byte[] bStrUTF8 = System.Text.Encoding.UTF8.GetBytes(strText);

     

            byte[] bStrBIG5 = System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.GetEncoding("BIG5"), bStrUTF8);

     

            string strBIG5 = System.Text.Encoding.GetEncoding("BIG5").GetString(bStrBIG5);

     

     

    ----
    From: Will
    Blog: http://blog.miniasp.com/
    記載著 Will 在網路世界的學習心得與技術分享

    2007年11月30日 上午 06:04
  • string str = "我";

    byte[] bytes = Encoding.Default.GetBytes(str);       // 作業系統在繁體中文語系下 即得Big5的Byte Array

    或是

    byte[] bytes = Encoding.GetEncoding(950).GetBytes(str); // 作業系統在其他語系下 也能取得Big5的Byte Array

     

    基本上 Big5 是雙字元編碼  bytes 長度會是2  這兩個合起來就是 Big5 的碼

     

    2007年11月30日 上午 06:28
  • 程式碼區塊

    byte[] b = System.Text.Encoding.GetEncoding("BIG5").GetBytes("我");
    string big5 = string.Format("{0}{1}", Convert.ToString(b[0], 16), Convert.ToString(b[1], 16)).ToUpper();

     

     

    2007年11月30日 上午 06:49
  • 請你各位大大的回覆
    只是還有一點小問題,可以要請教一下,各位前輩
    因為我在抓輸入的文字,編碼可能中、英文混著用
    如果是抓Big-5時,輸入英文字時會出現錯誤
    那有什麼方法可以解決嗎?
    2007年11月30日 下午 12:01
  • 會有什麼錯誤嗎?

     

    如果真要判斷,你可以用 GetBytes 抓回來 byte[] 之後,用個迴圈判斷每一個 byte 的 range,只要是 ASCII 的字碼範圍內就是英文啦!

     

    程式碼區塊

     

    if ( bStr >= 0x41 && bStr <= 0x5A ) {

        // 這是大寫字母的範圍

    }

     

     


    ----
    From: Will
    Blog: http://blog.miniasp.com/
    記載著 Will 在網路世界的學習心得與技術分享

     

    2007年11月30日 下午 12:09
  • 程式碼區塊

    public string GetBig5Code(string s)
    {
      string Big5Code = "";
      byte[] b = Encoding.GetEncoding("Big5").GetBytes(s);
     
      // 是否為雙位元字
      if (b.Length == 2)
      {
        int codeNum = b[0]*256 + b[1];
       
        // 是否在 Big5 範圍值
        if ((codeNum >= 41281 && codeNum <= 41915) ||
            (codeNum >= 41917 && codeNum <= 41919) ||
            (codeNum >= 42048 && codeNum <= 50814) ||
            (codeNum >= 50849 && codeNum <= 51411) ||
            (codeNum >= 51520 && codeNum <= 63998))
        {
            Big5Code = string.Format("{0}{1}", Convert.ToString(b[0], 16), Convert.ToString(b[1], 16)).ToUpper();
        }
      }
     
      return Big5Code;
    }

     

     

    2007年11月30日 下午 01:54
  • 判斷 是 中文字(16 BIT) 還是 英數字(8BIT)

     

    程式碼區塊

     

    [DllImport("kernel32.dll", SetLastError=true)] static extern int IsDBCSLeadByte ( byte  bTestChar)

     

    string str = "我A你B他C";

     

    byte[] bytes = Encoding.GetEncoding(950).GetBytes(str);

     

    int i=0;

     

    while (i < te.Length )

    {

       if  (  IsDBCSLeadByte ( te[i])  )

      {

         //  te[i]  te[i+1]     是中文字

        i+=2;

       }

     else

     {

        //  te[i]    是英數字

        i++;

     }

     

    }

     

     

     

    2007年12月1日 上午 05:37
  •  

    IsDBCSLeadByte  可以確定雙字元字集 但雙字元字集不一定全部都是中文

    IsDBCSLeadByteEx ( uint codepage ,byte  bTestChar) 這個比較正確

    2007年12月1日 下午 04:43
  •  Meng-Hsuan Cheng 寫信:

     

    IsDBCSLeadByte  可以確定雙字元字集 但雙字元字集不一定全部都是中文

    IsDBCSLeadByteEx ( uint codepage ,byte  bTestChar) 這個比較正確




    TO   Meng-Hsuan Cheng  :

    您說得沒錯  

    EX:

    IsDBCSLeadByteEx (950 , te[ i ] );
    2007年12月2日 上午 08:09
  • IsDBCSLeadByteEx 真是個好東西!

     

    底下是相關的 API 說明文件網址:

    http://msdn2.microsoft.com/en-us/library/ms776460.aspx

     

    ----
    From: Will
    Blog: http://blog.miniasp.com/
    記載著 Will 在網路世界的學習心得與技術分享

    2007年12月2日 下午 02:11
  • 真是感謝各位大大的幫忙
    看來小弟我,還是很多要學
    2007年12月3日 上午 02:33