2014-01-07 80 views
2

我試圖征服中國的編碼問題。到目前爲止,我面前的唯一障礙是正確顯示在raw_input()中鍵入的用戶。例如,我對這部分的抽象解決方案是這樣的:如何在Python中調用raw_input()來正確顯示中文字符串?

#coding: utf-8 
name_a = raw_input('請輸入文字') 
print name_a 

但是,由此我只能正確顯示'請輸入文字'。如果用戶在raw_input()中輸入中文字符,打印名稱_a將顯示utf-8代碼點,如'/ xb7'

無論如何,我在網上搜索,並找到此代碼可以解決我的問題:

#coding: utf-8 

n=raw_input(unicode('請輸入文字','utf-8').encode('gbk')) 
print n 

它的工作!但是當我試圖將其植入我自己的代碼中時。我的代碼無法執行。而且發生了更奇怪的事情。稍後當我將這些代碼複製到其他空文件時,它也無法工作。只是一瞬間,程序結束了(我知道Windows環境下的python的功能,所以我在文件的末尾添加了x = input())。後來我刪除了包含第二個代碼段的原始測試py文件。現在我無法在任何新創建的文件中執行它。

我在Windows XP環境下使用Python 2.7

發生了什麼事?

有沒有另一種方法可以幫助我顯示用戶輸入的中文內容raw_input()

非常感謝。

+0

它拋出什麼錯誤? –

+0

也許是相關的,因爲這看起來可能是Windows問題? http://stackoverflow.com/q/4942305/646543 – Michael0x2a

+0

@Mario做了任何答案回答你的問題? – alvas

回答

1

這個工作對我來說:

x = raw_input(u'請輸入文字'.encode("utf8")) 

另外,我是能夠成功地只是print(x),並將它顯示中國漢字,所以很可能你有一個OS(或終端客戶端)字體呈現的問題。



邊注意:不要在Python 2.x版本使用input()它含蓄地表示用戶輸入的所有數據(input() == eval(raw_input())),因此類似__import__("os").system("rm -rf /*")會擦除運行Python腳本的計算機的硬盤驅動器。

+0

我只是試過這個,並沒有爲我工作。命令提示符顯示「Φ»╖Φ╛ôσàÑμûçσ¡ù」。你在使用哪種操作系統? – Michael0x2a

+0

我很困惑。 'input()'與'os.system'中瘋狂的'rm -rf'有什麼關係? – alvas

+0

@alvas由於在Python 2.x中'input()'等同於'eval(raw_input())',因此任何用戶輸入都被評估爲Python代碼。因此,如果例如此腳本在服務器上運行,並且用戶輸入了該代碼,則服務器的硬盤驅動器將被擦除。我喜歡總是寫和鼓勵安全的編碼習慣。 – C0deH4cker

1

使用此代碼:

#coding: utf-8 

x = raw_input(u'請輸入文字: '.encode("utf8")) 
print "reprinting:",x 

[出]:

$ python test.py 
請輸入文字: 123 
reprinting: 123 

所以可能它不是一個Python的問題,但您的操作系統的問題。如果你在控制檯上混亂輸出,也許它是字體。

0

試試這個:

#coding: utf-8 
import sys 

name_a = raw_input('請輸入文字:'.encode(sys.stdout.encoding)) 
print name_a.decode(sys.stdout.encoding) 
print name_a 

輸出示例:

請輸入文字:中文字符 
中文字符 
中文字符 
+0

我在python上測試了這個,但是它顯示UnicodeDEcodeError:'ascii'編解碼器無法解碼位置0中的字節0xe8:ordinal沒有位於(128)我在Ubuntu上使用python2.7 – Mario

+0

上面的代碼工作時,Python sys默認編碼是utf-8。 在導入sys後添加以下兩行,它會工作。 重載(系統) sys.setdefaultencoding('utf-8') – zufuliu

0

我的劇本爲主。PY

# -*- coding: utf-8 -*- 
import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 

name = raw_input("中文名字: ".encode(sys.stdout.encoding)) 
print name 

name = raw_input("中文名字: ".encode(sys.stdin.encoding)) 

我調用它使用窗口PSHELL和(蟒2.7.8)

python mian.py 

然後可以正確地顯示:

中文名字: 中文名字測試 
中文名字測試 

可以將它幫助某人。

+0

請不要裝載'sys.setdefaultencoding()'技巧。不需要破壞標準系統編解碼器,並且這可以破壞實際依賴於非ASCII數據的代碼,當隱式解碼或編碼時拋出異常。 –

+0

非常感謝您的意見。我會再次努力,我是一個新人。 –

相關問題