Python sys.Argv utf-8到unicode不工作



我有下面的代码,它的行为非常奇怪。

当我执行以下操作时,utf-8很好地转换为unicode。

print u'xE1x80x96xE1x80xBBxE1x80xB1xE1x80xACxE1x80xBAxE1x80x9BxE1x80x8AxE1x80xBA'.encode('raw_unicode_escape')

这很好。但是,当我从sys.获得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 "xE1x80x96xE1x80xBBxE1x80xB1xE1x80xACxE1x80xBAxE1x80x9BxE1x80x8AxE1x80xBA"

我得到了下面相同的字符串,它没有被转换成unicode。

<type 'unicode'>
xE1x80x96xE1x80xBBxE1x80xB1xE1x80xACxE1x80xBAxE1x80x9BxE1x80x8AxE1x80xBA

我需要转换来自sys的输入。

请帮助。

谢谢。

实际Python级别的字符串字面量(对于strunicode)是Python自动解析字符转义的唯一地方。如果您想转换像这样使用文字转义的外部字符串,您需要做这样的事情来显式调用文字转义解释机制:

# 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-1 bytes,然后再解码为utf-8,因为不支持text->text编码和解码),但它是一个类似的过程。

最新更新