2013-08-07 1 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!), что заставило меня задуматься о ASCII CODEPAGE, ANSI и все такое ...