ASCII 到 ANSI 转换不起作用

ASCII 到 ANSI 转换不起作用

尝试在 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>

相关内容