尝试在 Linux 上将 ASCII 文件转换为 ANSI:
$ file -bi relocate.xml
text/xml; charset=us-ascii
$ iconv -f us-ascii -t ms-ansi < relocate.xml | file -bi -
text/xml; charset=us-ascii
$ cat relocate.xml | recode us-ascii..ms-ansi | file -bi -
Request: ANSI_X3.4-1968..:libiconv:..CP1252
Shrunk to: ANSI_X3.4-1968..CP1252
text/xml; charset=us-ascii
我还尝试了其他工具来推断编码,它们都返回相同的结果:
$ enca -L none relocate.xml ; echo "###" ; uchardet relocate.xml ; echo "###" ; encguess relocate.xml
7bit ASCII characters
CRLF line terminators
###
ASCII
###
relocate.xml US-ASCII
如您所见,工具iconv
和recode
工具都没有错误消息,但最终编码仍然是us-ascii
.
如何将其转换为 ANSI?
如果您要转换为 (ms-ansi = windows-1252) 的编码是您要从 (ascii) 转换的编码的超集,
iconv
则将保持原样,因为显然没有什么可做的。此外,文件的“字符集”不是某种强制性元数据,该
file
实用程序只是在猜测,使用不可靠的启发式算法,大约 20% 的时间会失败,这可能是什么。例子:
不,该文件是一个 UTF-8 文件,它也有正确的 xml 声明。
从评论:
添加正确的 xml 声明(
<?xml ... ?>
如上)并使用一些 xml 验证器检查 xml 语法是否正常。