我们有HTML源文件,其中包含编码为&#nnnn;
的特殊字符,如下所示:
außergewöhnlich
我们希望将它们转换为普通的UTF-8:
außergewöhnlich
有没有什么小工具可以做到?
答案 0 :(得分:4)
您可以使用perl和HTML::Entities
执行此操作。
echo 'echo 'außergewöhnlich' |
perl -MHTML::Entities -pe'binmode STDOUT, ":utf8"; HTML::Entities::decode_entities($_)'
答案 1 :(得分:3)
我认为ascii2uni工具将执行所需的转换。
工具的大小约为几百千字节,比上面提到的lynx小。
答案 2 :(得分:-1)
这是一个完整的shell解决方案(显然你没有指定要使用的'语言')。
foo='außergewöhnlich'
echo "$foo"
außergewöhnlich
eval "$(printf '%s' "$foo" | sed 's/^/printf "/;s/�*\([0-9]*\);/\$( [ \1 -lt 128 ] \&\& printf "\\\\$( printf \"%.3o\\201\" \1)" || \$(which printf) \\\\u\$( printf \"%.4x\" \1) )/g;s/$/\\n"/')" | sed "s/$(printf '\201')//g"
außergewöhnlich
评论:这项工作还有破折号(用作Ubuntu的标准shell)。我们必须在某些地方使用GNU printf,因为dash中的内置printf不知道\ u转换为Unicode。此外,GNU printf有点愚蠢,因为它拒绝使用从0到127的代码点,这在UTF中是完全合法的。因此,我们必须使条件为0并且在0-128范围内使用八进制。 最后一个sed用于你需要转换像换行符这样的字符( )或Tab()。我们使用一个技巧,以便命令替换保留这些尾随字符,然后我们删除最后一个sed的“技巧”。如果您的输入符合Unicode,则不应该使用用于此的字符,因此它应该是安全的。