我有一个网络应用程序,允许用户上传他们的内容进行处理。处理引擎需要 UTF8(我正在从多个用户的文件中组合 XML),所以我需要确保我可以正确解码上传的文件。
因为如果我的任何用户知道他们的文件甚至被编码,我会感到惊讶,我几乎不希望他们能够正确指定要使用的编码(解码器)。因此,我的应用程序的任务是在解码之前进行检测。
这似乎是一个普遍的问题,我很惊讶没有找到解决方案的框架功能或通用配方。可能是我没有使用有意义的搜索词进行搜索吗?
我已经实现了 BOM 感知检测(http://en.wikipedia.org/wiki/Byte_order_mark),但我不确定文件将多久上传一次 w/oa BOM 以指示编码,这对大多数非 UTF 文件。
我的问题归结为:
- 对于绝大多数文件来说,BOM 感知检测是否足够?
- 在 BOM 检测失败的情况下,是否可以尝试不同的解码器并确定它们是否“有效”?(我的尝试表明答案是“不”。)
- 在什么情况下,C# 编码器/解码器框架的“有效”文件会失败?
- 是否有任何地方的存储库包含大量具有各种编码的文件以用于测试?
- 虽然我专门询问 C#/.NET,但我想知道 Java、Python 和其他语言的答案,以便下次我必须这样做。
到目前为止,我发现:
具有 Ctrl-S 字符的“有效”UTF-16 文件导致编码为 UTF-8 引发异常(非法字符?)(这是 XML 编码异常。)- 使用 UTF-8 解码有效的 UTF-16 文件会成功,但会给出带有空字符的文本。嗯?
- 目前,我只期望 UTF-8、UTF-16 和可能的 ISO-8859-1 文件,但如果可能的话,我希望解决方案是可扩展的。
- 我现有的输入文件集还不够广泛,无法发现实时文件会出现的所有问题。
- 尽管我尝试解码的文件是“文本”,但我认为它们通常是使用在文件中留下垃圾字符的方法创建的。因此“有效”文件可能不是“纯”文件。哦快乐。
谢谢。