【问题标题】:Python \xYZ characters in console控制台中的 Python \xYZ 字符
【发布时间】:2012-10-09 12:43:53
【问题描述】:

我正在构建一个需要两个文件的程序,经过一些处理后,我必须比较文件的某些部分。

例如,当我打印两个要比较的字符串时,它看起来像这样:

CSV = 'UC013. MANTER ITEM DE NOTA FISCAL / NOTA DE SERVI\xc3\x87O / RECIBO'
DOC = 'UC013. MANTER ITEM DE NOTA FISCAL / NOTA DE SERVI\xc7O / RECIBO'

两者应该相同:

'UC013. MANTER ITEM DE NOTA FISCAL / NOTA DE SERVIÇO / RECIBO'

如何在控制台中打印正确的字符并正确比较字符串?

非常感谢您的帮助。

【问题讨论】:

    标签: python string escaping hex


    【解决方案1】:

    你有两个不同编码的文件,第一个是 utf-8 (CSV),第二个是 latin1 (DOC)。如果你想比较它们,你必须先将它们解码为 un​​icode:

    CSV = 'UC013. MANTER ITEM DE NOTA FISCAL / NOTA DE SERVI\xc3\x87O / RECIBO'
    DOC = 'UC013. MANTER ITEM DE NOTA FISCAL / NOTA DE SERVI\xc7O / RECIBO'
    CSV = CSV.decode('utf-8')
    DOC = DOC.decode('latin1')
    print(CSV == DOC)    # True
    

    【讨论】:

    • 感谢您的详细回答。现在我得到了具有相同编码的两个字符串,但是当我在控制台上打印它们时,我仍然得到这样的东西:'UC019. MANTER 产品 - CONFEC\xc7\xc3O'。我应该能够使用 CSV.decode('unicode_escape') 正确打印字符,但我得到:UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-26: ordinal not in range(128)。有什么帮助吗?
    • 我注意到我的日志记录模块已损坏...如果我只使用打印,它可以正常工作...不过我不确定如何解决这个问题。非常感谢我们的帮助!
    • python 不喜欢你尝试将非 ascii 字符写入不支持它的控制台。您使用的是哪个控制台和操作系统?如果 python 无法确定您的控制台使用哪种编码(通常通过查看LANG 环境变量),sys.stdout.encoding 默认为ANSI_X3.4-1968。尝试设置一个合理的输出编码...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2014-09-04
    相关资源
    最近更新 更多