shell脚本中的编码问题

shell脚本中的编码问题

我有以下代码:

#!/bin/bash
task=$1
xml=$(curl -sL "http://login:[email protected]/issues/$task.xml")
id=$(xmllint --xpath '//issue/id/text()' --format - <<<"$xml")
name=$(xmllint --xpath '//issue/subject/text()' --encode utf8 - <<<"$xml")

echo "task #$id - $name"

但是当我运行它时,我得到编码的西里尔文本,如下所示:

task #10014 - &#x41B;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x43D;&#x43E;&#x43C;&#x435;&#x440; &#x43A;&#x43B;&#x438;&#x435;&#x43D;&#x442;&#x430;

请帮忙修复它。我不想对这段文字进行编码

答案1

经过几分钟的斗争后xmllint,我通常会放弃并最终使用xmlstarlet相反,它通常更倾向于做你期望它做的事情。这里:

xmlstarlet sel -t -v '//issue/subject' <<< "$xml"

(或者<rant>完全放弃 XML 并使用更明智的格式</rant>)。

相关内容