【问题标题】:Python sys.argv utf-8 to unicode not workingPython sys.argv utf-8 到 unicode 不起作用
【发布时间】:2016-08-23 06:24:02
【问题描述】:

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

当我执行以下操作时,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 字符。

请帮忙。

谢谢。

【问题讨论】:

    标签: python unicode encoding utf-8


    【解决方案1】:

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

    【讨论】:

    • 这更好。谢谢。
    猜你喜欢
    • 2013-01-29
    • 2014-06-24
    • 2016-05-03
    • 2015-04-12
    • 2018-01-14
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多