[英]python2.7 utf-8 input through command line in Windows7
我是新手,而且我確定過去也曾問過類似的問題,但是我很難找到/理解答案。 預先感謝您對我耐心等待!
因此,我試圖編寫一個腳本來讀取utf-8編碼的輸入文件中的行,將其部分與用戶傳遞的可選命令行參數進行比較,如果有匹配項,則對該行進行一些處理在將其打印到輸出文件之前。 我正在使用codecs
打開文件。
我現在正在使用argparse
模塊來解析命令行參數。 文件中的行可以使用各種語言,因此命令行參數也必須為utf-8。
例如:
文件中的一行可能如下所示:
разъедают {. r ax z . j je . d ax1 . ju t .}
該腳本應從命令行調用,如下所示:
>python myscript.py mytextfile.txt -grapheme ъ
這是我的代碼中應該進行處理的部分。 在這種情況下, orth
一些西里爾文字和grapheme
是西里爾字符。
def process_orth(orth, grapheme):
grapheme = grapheme.decode(sys.stdin.encoding).encode('utf-8')
if (grapheme in orth):
print 'success, your grapheme was: ' + grapheme.encode('utf-8')
return True
else:
print 'failure, your grapheme was: ' + grapheme.encode('utf-8')
return False
不幸的是,即使字素肯定存在,該函數仍返回false並打印問號而不是字素:
failure, your grapheme was: ?
我嘗試按照我讀過的其他一些文章的建議在process_orth()
的開頭添加以下內容,但它似乎不起作用:
grapheme.decode(sys.stdin.encoding).encode('utf-8')
所以我的問題是
如何通過命令行將utf-8字符串傳遞到python腳本中? 另外,在Windows7上是否還有其他怪癖(安裝cygwin會不會有任何改變)?
如果要使用codecs.open()
打開輸入文件,則說明您具有unicode數據, 而不是編碼數據。 你會希望只解碼grapheme
,不會再次對其進行編碼成UTF-8:
grapheme = grapheme.decode(sys.stdin.encoding)
if grapheme in orth:
print u'success, your grapheme was: ' + grapheme
return True
注意,我們也打印 unicode。 通常, print
將確保為當前代碼頁再次編碼Unicode值。 由於Windows控制台打印非常困難,這仍然可能失敗,請參閱http://wiki.python.org/moin/PrintFails 。
不幸的是,Windows上的sys.argv
顯然會出現亂碼,因為Python使用了非Unicode感知系統調用。 請參閱從Windows上的Python 2.x中的命令行參數讀取Unicode字符,以獲取支持Unicode的替代方法。
我認為argparse
Unicode輸入沒有任何問題,但是,如果這樣做,您始終可以將win32_unicode_argv()
的unicode輸出獲取並將其編碼為UTF-8,然后win32_unicode_argv()
argparse
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.