尝试在 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 ?
答案1
如果您要转换的编码 (ms-ansi = windows-1252) 是您要转换的编码 (ascii) 的超集,iconv
则将保持原样,因为显然没有什么可做的。
此外,文件的“字符集”不是某种强制元数据,该file
实用程序只是猜测,使用不可靠的启发式方法,大约 20% 的时间会失败,这可能是什么。
例子:
$ printf '%s\n' '<?xml version="1.0" encoding="UTF-8"?>' '<a>' '<b>'{0..100000}'</b>' '<c>