2016-08-23 115 views
-1

我有以下代碼非常奇怪。python sys.argv UTF-8 unicode不工作

當我執行以下操作時,utf-8很好地轉換爲unicode。

print u'\xE1\x80\x96\xE1\x80\xBB\xE1\x80\xB1\xE1\x80\xAC\xE1\x80\xBA\xE1\x80\x9B\xE1\x80\x8A\xE1\x80\xBA'.encode('raw_unicode_escape') 

這工作正常。但是,當我從sys.argv獲取utf-8字符串時,它不起作用。

import sys  

if __name__ == "__main__": 
    args = sys.argv 

    input_string = args[1] 

    if type(input_string) is not unicode: 
     input_string = unicode(input_string, "utf-8") 

    print type(input_string) 
    print input_string 

當我運行像下面,

python test_print.py "\xE1\x80\x96\xE1\x80\xBB\xE1\x80\xB1\xE1\x80\xAC\xE1\x80\xBA\xE1\x80\x9B\xE1\x80\x8A\xE1\x80\xBA" 

我得到了以下相同的字符串,它不會轉換爲Unicode。

<type 'unicode'> 
\xE1\x80\x96\xE1\x80\xBB\xE1\x80\xB1\xE1\x80\xAC\xE1\x80\xBA\xE1\x80\x9B\xE1\x80\x8A\xE1\x80\xBA 

我需要將輸入從sys.argv轉換爲unicode字符。

請幫忙。

謝謝。

回答

2

實際的Python級別字符串文字(對於strunicode)是Python自動分析字符轉義的唯一地方。如果你想使用文字逃逸這樣的外字符串轉換,你會做這樣的事情explicitly invoke the literal escape interpretation machinery

# Converts from str to str interpreting escapes, then decodes those bytes 
# using the UTF-8 encoding 
input_string = args[1].decode('string_escape').decode('utf-8') 

的具體步驟是在Python 3略有不同(你必須使用unicode_escapecodecs模塊,並添加一個額外的步驟,將字面解碼str轉換爲latin-1bytes,然後解碼爲utf-8,因爲不支持text-> text編碼和解碼),但它是一個類似的過程。

+0

這甚至更好。謝謝。 – moeseth