我目前正在使用命令将一些汉字转换为拼音,这要求 bash 中的字符串是 Unicode 安全的,并将结果放入另一个变量中。我可以正常运行以下命令:
chinese="你好"
to-pinyin.py $chinese
它将按预期打印输出,但是,由于我希望输出在变量中,所以我尝试执行以下操作:
chinese="你好"
pinyin=$(to-pinyin.py $chinese)
python 将失败并显示:
Traceback (most recent call last):
File "/~/to-pinyin.py", line 31, in <module>
print pinyin.get(hanzi, delimiter=" ").capitalize()
UnicodeEncodeError: 'ascii' codec can't encode character u'\u01d0' in position 1: ordinal not in range(128)
反引号也会发生同样的情况。我想我将通过将输出写入文件并在那里进行转换来解决,然后将字符串加载到变量中。我还能如何解决此问题以避免出现解决方法?
编辑:
这里每个请求是语言环境的输出:
$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
使用的解决方案
感谢muru的回复和一些帮助这个另一个答案我添加.encode('utf-8')
到 python 脚本中打印字符串的末尾。
我希望我可以切换到python3,但是那里没有默认的拼音包,而且我似乎无法安装任何好的拼音包来让我在python3中快速完成工作。我记得尝试了一段时间,但 python3 一直拒绝导入我安装的包,所以我只是在 python2 中安装了一个包,它开箱即用。