3

我需要从 Python 脚本中检查俄语单词的拼写。我正在通过 shell 将这些词发送到 hunspell。我的 hunspell 字典都是 UTF8 的。我从命令行使用它们没有问题。

但是当我尝试从我的 Python 脚本发送字符串时,发生了一些奇怪的事情。

如果我使用德语词典:

text = "Universitüt"
cmd = "echo " +text + " | /usr/local/bin/hunspell -d German_de_DE"
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, executable="/bin/bash")
result, err = p.communicate()
if result:
    result = result.split()
    print(result)

我得到了我期待的回应

[b'Hunspell', b'1.3.2', b'&', b'Universit', b'4', b'0:', b'Universit\xc3\xa4r,', b'Universit\xc3\xa4t,', b'Universen,', b'Universaler', b'*']

我可以处理。但是,如果我用相同的代码向俄语词典发送一个俄语单词,当然除了:

text = "университат"
cmd = "echo " +text + " | /usr/local/bin/hunspell -d Russian_ru_RU"

hunspell 的响应是空的:

[b'Hunspell', b'1.3.2']

直接从 bash 它可以工作:

echo университат | hunspell -d Russian_ru_RU
Hunspell 1.3.2
& университат 1 0: университет

所以我想这是某种编码问题。但是我不知道考虑到我的语言环境是 utf-8 并且 pythonsys.getdefaultencoding()也说 utf-8 可能是什么。

我在 Mac OS X 上使用 python 3.3.2。

任何提示将非常感谢。

4

1 回答 1

2

正如Iwan Aucamp在评论中建议的那样,解决方案是使用:

hunspell -i UTF-8 ...

即确保 hunspell 知道它正在获取 UTF-8 字符串。

一旦我将它添加到我的代码中,我在 shell 中得到的结果(即使没有 -i 标志)和我通过管道字符串从 Python 到 hunspell 得到的结果是相同的。

于 2013-08-02T07:43:03.880 回答