none
請教如何將 BIG5 字串轉成 UTF8 字串 RRS feed

  • 問題

  • 大家好,

     

    我的程式需要將 BIG5 字串先轉成 UTF8 的字串, 再傳給另外一支程式, 以下是我的程式:

     

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

    return Encoding.UTF8.GetString(bytes);

     

    但不知道是我的程式還是對方的程式有問題, 對方說都是亂碼.

    如果有人知道請指導一下好嗎, 謝謝.

     

    -Joey

    2007年10月3日 上午 09:14

所有回覆

  •   請問,你有檢查一下,你所return回去的字串是什麼嗎?就是return Encoding.UTF8.GetString(bytes)這行.

     

    我的轉碼寫法如下

    程式碼區塊
    string a = "測試";
    byte[] b=Encoding.Default.GetBytes(a);//
    將字串轉為byte[]
    MessageBox.Show(Encoding.Default.GetString(b));//
    驗證轉碼後的字串,仍再正確的顯示.
    byte[] c = Encoding.Convert(Encoding.Default, Encoding.UTF8, b);//
    進行轉碼,參數1,來源編碼,參數二,目標編碼,參數三,欲編碼變數
    MessageBox.Show(Encoding.UTF8.GetString(c));//
    顯示轉為UTF8,仍能正確的顯示字串

     

    2007年10月4日 上午 12:13
  • 在 .Net 下,所有的字串都是以 Unicode 存在,其他的編碼只能以 byte 陣列方式存在才不會掉碼。

    若你在 GetBytes(str) 這裡中斷,可以看到 str 內容非亂碼時,表示這時候 str 是 Unicode 。

    Default 表是採用地區語言編碼,若是你的 OS 地區語系設為繁中,第一句表示你將  Unicode 字串轉成 big5 Bytes 陣列。

    第二句是將 big5 陣列轉成 UTF8 字串,這樣就不對了,因為字串只能是 Unicode 。

     

    所以你只能輸出 UTF8 的 Byte 陣列。例:

    return Encoding.UTF8.GetBytes(str);

    2007年10月4日 上午 02:20
  • 璉大說的觀念正確,傳回的型態必須要是 byte[]。

    您可以用以下的程式碼,去看 1.txt 的16進制開頭為 FF FE (unicode)。

     

                string strBig5 = "這是中文字";
                byte[] aby = Encoding.UTF8.GetBytes(strBig5);
                FileStream fs = new FileStream(@"C:\1.txt", FileMode.Create);
                fs.Write(aby, 0, aby.Length);
                fs.Close();

    若是這樣還不行,那是對方的問題..
    2007年10月5日 上午 03:27