Utf 8 如何创建具有未知字符编码的文件

Utf 8 如何创建具有未知字符编码的文件,utf-8,character-encoding,char,Utf 8,Character Encoding,Char,我想测试一些文件字符编码检测功能,输入UTF-8、windows-1252、ISO-8859-1等类型的文件 我还想输入未知字符编码的文件,这样用户就可以得到警告 我还没有找到一个好方法来创建未知或不可检测字符编码的文件 空文本文件具有无法检测的字符编码(除非它具有Unicode BOM) 但基本上,您必须要求用户告知他们提供给您的文件使用了哪个字符编码,或者告诉他们使用哪个字符编码(或者,如果您指定了默认值但允许覆盖它(这是许多编译器所做的) 然后可以根据约定的字符编码测试内容的有效性。这将捕

我想测试一些文件字符编码检测功能,输入UTF-8、windows-1252、ISO-8859-1等类型的文件

我还想输入未知字符编码的文件,这样用户就可以得到警告


我还没有找到一个好方法来创建未知或不可检测字符编码的文件

空文本文件具有无法检测的字符编码(除非它具有Unicode BOM)

但基本上,您必须要求用户告知他们提供给您的文件使用了哪个字符编码,或者告诉他们使用哪个字符编码(或者,如果您指定了默认值但允许覆盖它(这是许多编译器所做的)

然后可以根据约定的字符编码测试内容的有效性。这将捕获一些错误,但请注意,许多字符编码允许具有任何值的任何字节序列,因此任何内容始终有效(即使字符编码不是用于写入文件的编码)

然后,您可以测试与预期值的一致性,例如某些语法或允许的字符或单词,以捕获更多错误(但您不一定能够说字符编码不匹配;可能只是内容不正确)

要创建具有不同字符编码的文件,可以编写程序或使用第三方程序,如或PowerShell

如果你想要一个未知的字符编码,只需生成一个随机整数映射,转换一个文件,丢弃映射,然后即使你不知道它

最终,文本文件对于用户来说太过技术化,无法处理。为他们提供一些其他选项,如开放文档或电子表格格式,如.odt、.docx、.ods或.xlsx。这些很容易被程序读取

head -c1024 /dev/random > /tmp/badencoding

这几乎可以肯定是你在实践中想要的(1kB的随机数据),但是“不可检测字符编码”并没有一个很好的定义。这个随机文件是合法的8位ASCII。它当然不是8位ASCII,这只是一个启发。所以你要做的就是测试你的算法是否以用户可能希望的方式工作;如果不了解创建文件的人的想法,这里就没有最终的“正确”了。

什么是未知编码?我假定您没有告诉检测实用程序真正的编码是什么,因此在检测之前任何编码都是未知的。