簡體   English   中英

Windows7中通過命令行輸入python2.7 utf-8

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM