Character-Encoding
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?
如果您要轉換為 (ms-ansi = windows-1252) 的編碼是您要從 (ascii) 轉換的編碼的超集,
iconv
則將保持原樣,因為顯然沒有什麼可做的。此外,文件的“字元集”不是某種強制性元數據,
file
實用程序只是在猜測,使用不可靠的啟發式算法,失敗率約為 20%,這可能是什麼。例子:
$ printf '%s\n' '<?xml version="1.0" encoding="UTF-8"?>' '<a>' '<b>'{0..100000}'</b>' '<c>😊</c>' '</a>' > /tmp/foo.xml $ file /tmp/foo.xml /tmp/foo.xml: XML 1.0 document, ASCII text $ file -bi /tmp/foo.xml text/xml; charset=us-ascii
不,該文件是一個 UTF-8 文件,它也有正確的 xml 聲明。
從評論:
Windows 10 Sysprep 拒絕了我的
relocate.xml
文件,所以我認為編碼錯誤。添加正確的 xml 聲明(
<?xml ... ?>
如上)並使用一些 xml 驗證器檢查 xml 語法是否正常。