既然我很惊讶我的用户是否知道他们的文件甚至被编码了,我几乎没有希望他们能够正确地指定要使用的编码器。因此,我的应用程序需要在解码之前检测编码方式。
这似乎是一个普遍存在的问题,我很惊讶没有找到框架功能或通用解决方案。我是否没有使用有意义的搜索词语?
我已经实现了BOM感知检测(http://en.wikipedia.org/wiki/Byte_order_mark),但我不确定有多少文件会被上传而没有BOM来指示编码方式,并且对于大多数非UTF文件来说这并不有用。
我的问题归结为:
- 对于绝大多数文件,BOM感知检测是否足够?
- 在BOM检测失败的情况下,是否可以尝试不同的解码器并确定它们是否“有效”?(我的尝试表明答案是否定的。)
- 在什么情况下,“有效”的文件会在C#编码/解码框架中失败?
- 是否有任何存储库具有各种编码的众多文件可用于测试?
- 虽然我特别询问C#/.NET,但我想知道Java、Python和其他语言的答案,以备下次需要时使用。
到目前为止,我已经找到:
一份含有Ctrl-S字符的“有效”UTF-16文件导致编码成UTF-8时抛出异常(非法字符?)(那是一个XML编码异常。)- 解码一个有效的UTF-16文件,用UTF-8成功,但文本中会带有空字符。嗯?
- 目前我只期望UTF-8、UTF-16和可能的ISO-8859-1文件,但如果可能的话,我希望解决方案是可扩展的。
- 我的现有输入文件集不足以揭示所有在实际文件中可能发生的问题。
- 虽然我正在尝试解码的文件是“文本”,但我认为它们通常是使用留下垃圾字符的方法创建的。因此,“有效”的文件可能不是“纯粹”的。哦,太好了。
谢谢。
Ctrl-S
字符并不取决于它。UTF-8 和 UTF-16 都能够编码Ctrl-S
,只是对于使用所获得的 UTF-8 的软件来说,这个字符可能会出现意外情况。 - Vlad