Answers:
使用iconv:
echo "$var" | iconv --from-code=utf-8 --to-code=utf-16le --output=file2.txt
转换文件时,应确保文件包含字节顺序标记。即使标准说不建议对UTF-8使用字节序标记,但在没有字节序标记的情况下UTF-8和ASCII之间可能存在合理的混淆。
另外,指定UTF-16BE
或UTF-16LE
不添加字节顺序标记,因此我首先转换为UTF-16
,使用平台相关的字节序。然后,我用于file
确定实际的字节序并将其转换为UTF-16LE
。
最后,当您使用创建文件时bash
,该文件将接受bash
的locale charmap
编码,因此您需要从中进行映射。
(我将所有编码都大写,因为当您列出所有iconv
受支持的编码时,iconv -l
它们都是大写的。)
BASH_ENCODING="$( locale charmap | tr [:lower:] [:upper:] )"
echo $var | iconv -f "$BASH_ENCODING" -t UTF-16 > UTF-16-UNKNOWN-ENDIANNESS-FILE
FILE_ENCODING="$( file --brief --mime-encoding UTF-16-UNKNOWN-ENDIANNESS-FILE )"
iconv -f "$FILE_ENCODING" -t UTF-16LE UTF-16-UNKNOWN-ENDIANNESS-FILE > file2.txt