Bash相当于Python的字符串文字,用于utf字符串转换

时间:2010-07-07 00:20:29

标签: python bash utf-8

我正在编写一个bash脚本,需要解析包含@!'ó等特殊字符的html。目前我已经运行了整个脚本,它会忽略或跳过这些查询,因为它们从服务器返回为十进制unicode,如下所示:'。我已经想出如何解析并转换为十六进制并将它们加载到python中以将它们转换回它们的符号,我想知道bash是否可以本地进行最终转换。 python中的简单示例:

print ur"\u0032" ur"\u0033" ur"\u0040"

打印出来

23@

我可以在Bash中获得相同的结果吗?我已经查看了iconv,但我认为它不能做我想做的事情,或者更多可能是我不知道怎么做。

以下是一些相关信息:

Python String Literals

Hex to UTF conversion in Python

以下是预期输入输出的一些示例。

  

Ludwig van Beethoven - 5th Symphony and 6th Symphony ''Pastoral'' - Boston Symphony Orchestra - Charles Munch

     

Ludwig van Beethoven - 5th Symphony and 6th Symphony ''Pastoral'' - Boston Symphony Orchestra - Charles Munch

     

АлисА (Alisa) - Мы вместе. ХХ лет (My vmeste XX let)

     

АлисА (Alisa) - Мы вместе. ХХ лет (My vmeste XX let)

2 个答案:

答案 0 :(得分:2)

Bash内置的printf不支持Unicode代码,但外部printf(至少在我的基于GNU的系统上)不支持:

$ /usr/bin/printf "\u0410\u043b\u0438\u0441\u0410"
АлисА

或者这样,如果它不在printf中,则从您的路径中选择/usr/bin

$ $(type -P printf) "\u0410\u043b\u0438\u0441\u0410"
АлисА

$ env printf "\u0410\u043b\u0438\u0441\u0410"
АлисА

答案 1 :(得分:1)

可能的解决方案,例如:

$ function conv() { echo $* | python -c 'import re, sys; print re.sub(r"&#(\d+);", lambda x: unichr(int(x.group(1))), sys.stdin.read()).rstrip()' ; }
$ conv 'АлисА (Alisa)' 
АлисА (Alisa)