2012-07-13 147 views
0

我想非Unicode字符串轉換這樣,'¹ûº¤¡¾¢º¤ìñ©2'爲Unicode這樣,'ໃຊ້ໃນຄົວເຮືອນ'這是在老撾。我試着用下面的代碼,它的返回值是這樣的,'??????'。任何想法如何轉換字符串?轉換非Unicode爲Unicode

Public Shared Function ConvertAsciiToUnicode(asciiString As String) As String 
    ' Create two different encodings. 
    Dim encAscii As Encoding = Encoding.ASCII 
    Dim encUnicode As Encoding = Encoding.Unicode 

    ' Convert the string into a byte[]. 
    Dim asciiBytes As Byte() = encAscii.GetBytes(asciiString) 

    ' Perform the conversion from one encoding to the other. 
    Dim unicodeBytes As Byte() = Encoding.Convert(encAscii, encUnicode, asciiBytes) 

    ' Convert the new byte[] into a char[] and then into a string. 
    ' This is a slightly different approach to converting to illustrate 
    ' the use of GetCharCount/GetChars. 
    Dim unicodeChars As Char() = New Char(encUnicode.GetCharCount(unicodeBytes, 0, unicodeBytes.Length) - 1) {} 
    encUnicode.GetChars(unicodeBytes, 0, unicodeBytes.Length, unicodeChars, 0) 
    Dim unicodeString As New String(unicodeChars) 

    ' Return the new unicode string 
    Return unicodeString 
End Function 
+0

有關*如何在傳統編碼和Unicode(C#編程指南)*之間進行轉換的代碼,請訪問http://msdn.microsoft.com/en-us/library/cc488003.aspx幫助。 – AMissico 2012-07-13 06:43:00

+0

看到問號(?)通常表示您的角色對齊關閉。一些Unicode字符可以是三個字節長。使用UTF8或其他編碼工作嗎? – AMissico 2012-07-13 06:50:10

+3

如果你有一個*字符串*,那麼它不是ASCII。 .NET中的字符串*總是* UTF-16。你從哪裏得到ASCII編碼的數據?不要把它看作字符串,這是一個錯誤。您需要將ASCII數據存儲在字節數組中。但我會質疑爲什麼你有ASCII數據,因爲其中的信息顯然不是用ASCII編碼的。 「 – 2012-07-13 06:55:16

回答

4

你的8位編碼的文本老子不ASCII,但在像IBM CP1133或Microsoft LC0454,或最有可能的,泰國代碼頁874.一些代碼頁你必須找出它是哪一個。

重要的是你如何獲得(讀取,接收,計算)輸入字符串。到時候你讓一個它已經在Unicode和易於使用UTF-8輸出,例如,像這樣:

Dim writer As New StreamWriter("myfile.txt", True, System.Text.Encoding.UTF8) 
writer.Write(mystring) 
writer.Close() 

這裏是整個內存轉換:

Dim utf8_input as Byte() 
... 
Dim converted as Byte() = Encoding.Convert(Encoding.GetEncoding(874), Encoding.UTF8, utf8_input) 

數字874是說你的輸入在哪個代碼頁中的數字。一個特定的操作系統安裝是否支持這個代碼頁是另一個問題,但是如果你只是用它來編寫你的堆棧溢出問題,你自己的系統幾乎肯定會支持它。

+0

+1。並且我同意,它似乎是[本表]中定義的Windows泰語代碼頁874(http://msdn.microsoft.com/en-us/goglobal/cc305142) – MarkJ 2012-07-13 11:05:58