2013-08-01 58 views
2

我需要從Python腳本中檢查俄語單詞的拼寫。我正在通過shell將這些單詞傳遞給hunspell。我的hunspell字典都是UTF8。我從命令行使用它們沒有任何問題。如何通過subprocess.Popen正確傳遞utf8字符串從python到hunspell?

但是當我嘗試從我的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'] 
從慶典

直接它的工作原理:

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

所以我想這是某種編碼問題。但我不知道它可能會考慮到我的locale是utf-8,python的sys.getdefaultencoding()也說utf-8。

我使用Python 3.3.2在Mac OS X

任何提示將不勝感激。

+0

你使用的是什麼Python版本? –

+0

對不起,忘記了提。這是3.3.2 – Tench

+1

試試'hunspell -i UTF-8 ...' –

回答

2

由於Iwan Aucamp的意見建議,解決辦法是使用:

hunspell -i UTF-8 ... 

即確保中的hunspell知道它變得UTF-8字符串。

一旦我將其添加到我的代碼中,我得到的結果(甚至沒有-i標誌)和我通過從Python管道字符串hunspell得到的結果是相同的。

相關問題