将文件转换为 iso-8859-1(从 utf-8 可以,但在 us-ascii 文件上失败)

Convert file to iso-8859-1 (ok from utf-8 but fails on us-ascii files)

我有一个 git 存储库,html,js,php 文件主要以 UTF-8 编码。所有这些都应该用 UTF-8 编码,但是执行 file -i * 显示它们中的大部分是 UTF-8,但其中一些像这样:

file.html.twig: text/plain; charset=us-ascii

奇怪的是,如果我打开带有 Sublime 文本的文件,它会显示 UTF-8。如果我执行此转换:

iconv -f us-ascii -t iso-8859-1 file.html.twig -o file2.html.twig

iconv -f utf-8 -t iso-8859-1 file.html.twig -o file2.html.twig

没有任何变化,而如果我在 utf-8 文件上执行此命令,转换实际上完成了。

为什么会这样?我知道 us-ascii 是 utf-8 的子集,但 iconv 似乎无法更改此字符集。

(我的最终目标是维护一个git仓库,里面有iso-8859-1的文件,而git好像不识别文件编码,这将是第二个问题,首先我需要解决这个...)

谢谢

如果它们是 UTF-8,那么不要让像 file 这样的猜测者误导您。当它可以给出许多答案时,它给出了一个答案;每当它猜测 ASCII 时,它还可能包括 UTF-8、iso-8859-1 其他几十个。

因此,将所有 UTF-8 文件转换为 iso-8859-1。但是请理解这可能是一个有损转换,所以不要覆盖 iconv 的默认行为并告诉您错误。

哦,但是,您正在转换可能具有内部编码声明的文件(例如,HTML 和 XML),您应该更新它们的声明。

并且,如果有错误,您通常可以根据任何语言(=> \uD83D\uDEB2 或类似语言)将内容更改为 iso-8859-1 不支持的字符的不同表示形式,或者标记规则 ( => 🚲) 适用。