【发布时间】:2013-12-11 16:53:55
【问题描述】:
我才刚刚开始学习编码问题,而且我学到的知识已经足够知道它比我想象的要复杂得多(至少在 Windows 上),而且我还有很多东西要学。
我有一个我认为是用 UTF-8 编码的 xml 文档。我正在使用 VB.net 应用程序将带有(XslCompiledTransform 和 XmlTextWriter)的 xml 转换为特定于列的文本文件。 xml 中的某些字符在输出文本文件中出现错误。示例:一个破折号 (—) 被转换为三个字符“—。发生这种情况时,文件中的列将被丢弃。
据我了解,破折号甚至不是“Unicode 字符”。我不希望它有问题。但是,我可以通过更改 VB.net 应用程序中指定的编码来解决问题。
如果我使用它,则会保留 em-dash:
Using writer = New XmlTextWriter(strOutputPath, New UTF8Encoding(True))
如果我使用它,破折号会损坏为“-”:
Using writer = New XmlTextWriter(strOutputPath, New UTF8Encoding(False))
True/False 只是告诉 VB 是否在文件开头写入 BOM。据我了解,对于 UTF-8,BOM 既不需要也不推荐。所以,我的偏好是 False - 但后来我得到了奇怪的字符。
我有几个问题:
如何确定 xml 文件是 UTF-8?有 Windows 工具可以告诉我吗?
如何确定转换后的文件实际上是坏的?难道真正的问题是我用来查看它的编辑器? EmEditor 和 UltraEdit 都显示相同的内容。
我尝试使用 XVI32 十六进制编辑器查看文件。我想知道实际写入磁盘的内容,而不是某些 GUI 程序向我显示的内容。但是,即使是在 EmEditor 中看起来不错的文件,XVI32 也会向我显示坏字符。难道 XVI32 就是不理解非 ASCII 字符?为此,您会推荐什么 Windows 十六进制编辑器?
XML 文件为 650 MB,最终文本文件为 380 MB - 这在一定程度上限制了有用工具的列表。
【问题讨论】:
-
您希望 XslCompiledTransform 作为转换结果创建的文本文件采用哪种编码?您如何看待文本文件,您使用哪个应用程序?听起来它可以识别 UTF-8 BOM 并读取将其解码为 UTF-8 的文件,但是当您没有 BOM 时,它会使用不同的,可能是 8 位编码,如 Windows-1252。因此,您要么必须确保输出 BOM,要么必须将读取文本文件的代码或应用程序更改为默认为 UTF-8。
-
@MartinHonnen 如果可能的话,我希望将文本文件编码为 UTF-8。我同时使用 EmEditor 和 UltraEdit 来查看文件。那么,您认为该文件实际上是 UTF-8 吗?我将调查 EmEditor 或 UltraEdit 是否有办法在打开文件时强制编码。谢谢。
-
我认为你得到了一个 UTF-8 编码的文本文件,是的,但是你的编辑器使用 8 位编码,如 Windows 代码页或 ISO-8859-x 来解码文件。如果没有 BOM,编辑器就无法知道文件是 UTF-8 编码的,您必须告诉编辑器您想读取为 UTF-8。
标签: vb.net xslt encoding xslt-1.0