【发布时间】:2013-08-07 06:44:52
【问题描述】:
我有一个使用非 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ë
所以我希望文件流以某种方式假定它的 UTF32 编码,而文件的内容正在以 UTF8 写入......
将其全部编码为 UTF32 并不能提供答案。然后文件完全混乱了......
仍然不明白为什么会发生这种情况,但我脑子里有一个我需要探索的解决方法。
【问题讨论】:
-
"在使用 filestream.write 之前,字符串被 UTF8 编码为字节"你是什么意思?您需要显示您的代码。我怀疑你可能是双重编码 - 或者你实际上在文件中得到了完全正确的数据,而你只是在错误的编码中查看它。如果您也可以在文件中提供 bytes 会有所帮助(如在十六进制编辑器中所见)。
标签: vb.net encoding utf-8 filestream non-ascii-characters