请求示例:通过iconv命令将带BOM的UTF-16BE编码转换为GBK
解决带BOM的UTF-16BE转GBK的iconv命令问题
你的问题出在指定UTF-16BE作为源编码时,iconv不会识别并跳过开头的BOM(FE FF),而是将其当作UTF-16BE编码的无效字符处理,因此报错。以下是两种可行的解决方案:
方案1:让iconv自动识别BOM(推荐)
直接使用UTF-16作为源编码,iconv会自动检测文件开头的BOM并判断字节序:
iconv -f UTF-16 -t GBK goodmorning.txt > goodmorning_gbk.txt
方案2:先移除BOM再转换
如果必须指定UTF-16BE,可以先通过工具去掉文件开头的2个BOM字节,再进行转换:
使用sed命令:
sed '1s/^\xfe\xff//' goodmorning.txt | iconv -f UTF-16BE -t GBK > goodmorning_gbk.txt
使用dd命令:
dd if=goodmorning.txt bs=1 skip=2 | iconv -f UTF-16BE -t GBK > goodmorning_gbk.txt
验证说明:你的文件十六进制是FE FF 65 E9 4E 0A 59 7D,其中FE FF是UTF-16BE的BOM,后续65E9(早)、4E0A(上)、597D(好)是正确的UTF-16BE编码。使用上述任一方案都能成功转换为GBK编码的“早上好”。
内容的提问来源于stack exchange,提问作者Anas
相关产品推荐
相关产品推荐

