如何使用Iconv将UTF-8字符转换为十六进制NCR格式
iconv本身没有内置的NCR编码支持,你之前的命令使用逻辑有误:--unicode-subst参数仅用于替换目标编码中无法表示的字符,//TRANSLIT是音译转换标识,都无法实现直接输出全字符的NCR格式的需求。
解决方案
方案1:使用Perl单行命令(最简便)
直接运行以下命令即可完成转换,仅对非ASCII字符生成NCR,保留原ASCII字符不变:
perl -CSD -pe 's/([^\x00-\x7F])/sprintf("&#x%04X;", ord($1))/ge' your_input_file > your_output_file
参数说明:
-CSD:指定输入、输出、文件内容均采用UTF-8编码- 正则匹配所有非ASCII字符,通过
sprintf生成对应的十六进制NCR格式
方案2:使用Python脚本实现
如果更熟悉Python,可以使用以下轻量脚本完成转换:
import sys def utf8_to_ncr(): for line in sys.stdin: res = [] for c in line.rstrip('\n'): if ord(c) > 127: res.append(f'&#x{ord(c):04X};') else: res.append(c) print(''.join(res)) if __name__ == "__main__": utf8_to_ncr()
保存为utf82ncr.py后运行:
python3 utf82ncr.py < your_input_file > your_output_file
特殊场景:强制所有字符(含ASCII)转NCR
如果需要把所有字符都转换为NCR格式,调整对应逻辑即可,比如Perl命令修改为:
perl -CSD -pe 's/(.)/sprintf("&#x%04X;", ord($1))/ge' your_input_file > your_output_file
内容的提问来源于stack exchange,提问作者Samy
相关产品推荐
相关产品推荐

