0

このような非 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
4

1 に答える 1

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は、入力がどのコードページにあるかを示す数字です。特定のオペレーティング システムのインストールがこのコードページをサポートしているかどうかは別の問題ですが、スタック オーバーフローの質問を作成するために使用しただけであれば、システムはほぼ確実にサポートされます。

于 2012-07-13T08:28:42.393 に答える