2013-05-09 100 views
0

請幫助我,我嘗試了很多工藝的,但我不能在屏幕上做蟒紋UTF-8符號。Python的Unicode的終端輸出

我需要簡單地從一個UTF-8編碼的標準輸入流中讀取,數字符,在屏幕上打印它們的出現。

這裏是我的代碼:

import re 
from collections import Counter 
import sys 
import codecs 

sys.stdin = codecs.getreader('utf-8')(sys.stdin) 
sys.stdout = codecs.getwriter('utf-8')(sys.stdout) 
chars = re.findall(r'.', sys.stdin.read().lower()) 
counted_chars = Counter(chars).most_common(20) 
print counted_chars 

我想這

reload(sys) 
sys.setdefaultencoding('utf-8') 

但是,這是行不通的。我不斷地得到在屏幕上是這樣的:

(u'\u043e', 90) 

和這些字符(U「\ u043e」)由於某種原因不顯示爲正常的字母。

但是,如果我在控制檯做以下操作:

>>> a = u'\u043e' 
>>> print a 

一切都很好,我也得到

我在做什麼錯? 請解釋我或我指向正確的鏈接。我已經被搜查了三個多小時,並沒有成功解決我的問題。

非常感謝。

+0

''re.findall是沒用的這裏;一個unicode字符串本身就是一個序列。如果您想避免分割包含多個unicode代碼點的字符(例如''ё');你可以使用['regex.findall(UR '\ X',..)'](https://pypi.python.org/pypi/regex) – jfs 2013-05-10 02:07:23

+0

不幸的是,nothing.The \ X轉義匹配任何一些Unicode的匹配形成擴展的Unicode序列的字符。但它是如何使用的? – xolodec 2013-05-10 04:05:55

+0

1.點擊鏈接:'regex'不在stdlib([yet](http://www.python.org/dev/peps/pep-0429/))中,但它與're'向後兼容。 2.兩個圖案和輸入字符串應該是Unicode:'regex.findall(UR '\ X',u'ёлка')'。將它與're.findall(ur'。',u'ёлка')'進行比較。 (在源文件的頂部添加'# - * - coding:utf-8 - * - '以允許utf-8用字符串文字)。要打印它:'print「|」.join(result_of_findall)'。 – jfs 2013-05-10 04:20:42

回答

0

Counter.most_common()返回一個元組列表,當在Python中打印數據結構如元組和列表時,任何內部對象都會打印其表示形式(不管repr(x)會返回)。

要使用的str()代替repr()的人物,你會需要遍歷這個列表,並分別打印,例如打印:( '' R ..)

for char, count in counted_chars: 
    print char, count 
+0

非常感謝!有用! – xolodec 2013-05-09 18:44:45