0

非 ASCII 文字を使用するファイルがあります。ファイル ストリームを使用してこのファイルを保存すると、最終的にファイルに含まれる文字が期待どおりになりません。

私は書きます

stream
BT 38.3774 710 TD /F10 12.0000 Tf (België)Tj ET
endstream

ファイルの最終的なものは

stream
BT 38.3774 710 TD /F10 12.0000 Tf (België)Tj ET
endstream

文字列は、filestream.write を使用してファイルに保存する前に、UTF8 でバイトにエンコードされます。

誰かがなぜこれが起こるのか理解するのを手伝ってもらえますか?

短いバージョンのコードで結果を再現できました

Using newFile As New FileStream("C:\Users\Sed\Documents\test.txt", FileMode.Create)
        Dim content As String = "België"
        Dim contentByte As Byte() = New UTF32Encoding().GetBytes(content)
        newFile.Write(contentByte, 0, contentByte.Length)
        contentByte = New UTF8Encoding().GetBytes(content)
        newFile.Write(contentByte, 0, contentByte.Length)
    End Using

結果を与える

B   e   l   g   i   ë   België

したがって、ファイルストリームは、ファイルのコンテンツがUTF8で書き込まれている間、UTF32でエンコードされていると何らかの形で想定していると思います...

すべてを UTF32 でエンコードしても、答えは得られません。ファイルは完全にめちゃくちゃです...

なぜこれが起こるのかはまだわかりませんが、頭の中で調査する必要がある回避策があります。

4

1 に答える 1

0

私はそれを理解しました...

私が行った方法でファイルを作成すると、使用するエンコーディングはANSIまたはencoding.Defaultです

とても変化している

Dim newObjectByte As Byte() = New UTF8Encoding(True).GetBytes(DataObject("pdfObjectString").ToString())

Dim newObjectByte As Byte() = Encoding.Default.GetBytes(DataObject("pdfObjectString").ToString())

コードページに関する私の問題を解決しました。

codePage、ANSI ASCII、その他すべてについて考えさせられたThe Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)のおかげで...

于 2013-08-07T20:15:41.827 に答える