2013-08-07 22 views
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 

的字符串UTF8使用filestream.write將它們保存到文件之前編碼成字節。

有人能幫我理解爲什麼會發生這種情況嗎?

我一直體健重現結果代碼

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ë 

,所以我想到的是,FILESTREAM莫名其妙假定其UTF32編碼,而文件內容正在以UTF8編寫...

使用UTF32編碼它並不能提供答案。該文件完全搞砸了然後...

仍不明白爲什麼會發生這種情況,但我有一個解決方案在我的腦海中,我需要探索。

+1

「的字符串UTF8編碼成使用filestream.write之前字節」你是什麼意思?你需要顯示你的代碼。我懷疑你可能是雙重編碼 - 或者你確實在文件中有正確的數據,而你只是用錯誤的編碼來查看它。如果您可以在文件中提供*字節*(如十六進制編輯器中所示),這將有所幫助。 –

回答

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()) 

解決了我的代碼頁問題。

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)讓我想起了代碼頁,ANSI ASCII和所有的東西的感謝...