LINUX:以 ASCII 文本显示的文件可以包含 UTF-8 数据吗

LINUX:以 ASCII 文本显示的文件可以包含 UTF-8 数据吗

LINUX 版本 Red Hat Enterprise Linux ES 版本 4

我需要确认数据库摘录是否正确输出了 UTF-8 编码的数据。我使用数据库供应商指定的机制创建了文件,但当我这样做时

$ file extract.txt 

它回来了

ASCII text, with very long lines

但是,当我从主提取文件创建子文件并执行

$ file sub_extract.txt

它回来了

UTF-8 Unicode text, with very long lines

那么我的文件是否真的没问题,文件命令是否存在一些限制?有没有更好的方法来检查文件是否包含 UTF-8 数据?

答案1

file 命令仅使用文件的开头来检查其内容(出于性能原因)。如果您的文件开头仅包含 ascii 字符,file 命令会将文件报告为 ASCII。

如果提取的文件开头包含 UTF-8 字符(或 BOM-Header),则该命令会将该文件报告为 UTF-8(如第二个示例所示)。

有关魔术数字和文件头的更多信息,请参阅文件的手册页。

答案2

如果您导出仅包含英文文本和常见控制字符的数据库,并且将在导出中使用 BASE64 等编码方式对任何二进制数据进行编码,则除非存在明确的 BOM,否则 ASCII 和 UTF-8 将完全相同。

PS:UTF-16 是完全不同的,特别是因为对于某些工具来说它看起来像是完全正常的 ASCII 文本,而对于其他工具来说却是空白的,并且会让其他人感到困惑(我见过某些版本的 perl 读取和写入它很好,但完全无法用正则表达式匹配文本...)

相关内容