如何正确使用xmlstarlet fo的--encode选项执行UTF-8编码?
解决xmlstarlet fo指定UTF-8编码时的错误问题
错误原因
你遇到的failed to load external entity "utf-8"错误,本质是xmlstarlet把utf-8当成了要加载的输入文件,而非--encode选项的参数。当通过管道传递输入时,若未明确告知工具从标准输入读取内容,它会自动将选项后的字符串识别为文件名,自然找不到名为"utf-8"的文件,从而触发报错。
正确实现UTF-8编码的命令写法
方式1:直接指定输入文件(无需管道)
xmlstarlet fo -H -R --encode utf-8 unformatted.html
方式2:使用管道并明确从标准输入读取
通过-符号指定工具从标准输入获取内容,避免把编码参数误判为文件名:
cat unformatted.html | xmlstarlet fo -H -R --encode utf-8 -
简化写法(用-e代替--encode)
xmlstarlet支持短选项-e作为--encode的简写,命令更简洁:
cat unformatted.html | xmlstarlet fo -H -R -e utf-8 -
验证编码是否生效
执行命令后,可以用file -i工具检查输出的编码格式,确认是否为UTF-8:
cat unformatted.html | xmlstarlet fo -H -R -e utf-8 - | file -i
正常输出会包含charset=utf-8的标识。
内容的提问来源于stack exchange,提问作者sriganesh
相关产品推荐
相关产品推荐

