none
這是BUG嗎? 將字串輸出或讀入BIG5的文字檔時,日文字無法轉換? RRS feed

  • 問題

  • 作業系統:WinXP Pro SP2 並已安裝 Unicode補完計畫
    開發環境:VB.NET 2005

    小弟需要將 某字串 輸出成 BIG5 碼(也就是 ANSI碼)之文字檔,而該字串為中、日文並存,所以在作業系統上裝了Unicode 補完計畫。以為在Unicode 與 BIG5 的轉換上應該沒問題才對。不料當程式在 VB.NET 2005 撰寫完成後卻發現字串輸出時,日文的部份竟變成了問號"???",然後我寫了一小段程式在 VB.NET 2003 上測試,卻又正常。難道這是 VB.NET 2005 的 BUG 嗎? 不知版上的大大有沒有解決的方法呢,謝謝。

    以下這段程式碼,在 VB.NET 2003 上輸出正常。而在 VB.NET 2005 上日文會變問號。....
         Dim TmpStr As String = "あいうえお測試"
         Dim File As New System.IO.StreamWriter("D:\Test.txt", False, System.Text.Encoding.GetEncoding(950))
         File.Write(TmpStr)
         File.Close()

    或由 BIG5 文字檔中讀入時,在 VB.NET 2003 上也是正常的,但在 VB.NET 2005 上,日文的部份全部變成字碼為 &HF6F8 之字元。
            Dim File As System.IO.StreamReader = New System.IO.StreamReader("D:\test.txt", System.Text.Encoding.GetEncoding(950))
            Dim TmpStr As String = File.ReadToEnd
            File.Close()

    這倒底是啥原因?為何 VB.NET 2003 可以正常,反而 VB.NET 2005 有問題呢?小弟已經一個頭兩個大了。

    本想,好吧即然 VB.NET 2003 可用,那我就用 VB.NET 2003 寫個類別(DLL)拿到 VB.NET 2005 用。沒想到,結果輸出時日文字一樣變問號.....有哪位高手有解決的方法呢?謝謝了..

    2007年6月21日 上午 05:11

解答

  • 這是因為 .Net 2.0 會檢查 Encoding 的邊界,所以必須改呼叫 API 處理。

    例如:

    程式碼

    Dim TmpStr As String = "あいうえお測試"

    Dim arrBytes As Byte() = myWideCharToMultiByte(TmpStr, enuStandardCodePages.SCP_big5)

    MySaveBinaryFile(arrBytes, "D:\Life\Net\vb\vbtest\vbtest\jp.txt")

     

    2007年6月21日 上午 08:15
    版主

所有回覆