【问题标题】:Python unicode utf-8 || PRINT prints "wąż" correctly, but in a List1 the same "wąż" string is printed as 'w\xc4\x85\xc5\xbc' [duplicate]Python unicode utf-8 || PRINT 正确打印“wąż”,但在 List1 中,相同的“wąż”字符串打印为 'w\xc4\x85\xc5\xbc' [重复]
【发布时间】:2016-12-20 07:54:24
【问题描述】:

我声明了 utf-8 编码,当我 print "wąż" 或其他不常见字符时,终端正确打印出“wąż”。

但是当我有一个带有字符串“wąż”的列表并打印整个列表时,我得到'w\xc4\x85\xc5\xbc'

代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

list1 = ['wąż']

但是当我打印整个列表时:

>>>print list1
['w\xc4\x85\xc5\xbc']

当我打印 list1[0] 或简单地打印字符串“wąż”时,它会正确打印:

>>>print list1[0]
>>>print "wąż"
wąż
wąż

一小时后……

好的,所以我尝试使用 [x.encode('utf-8') for x in list1] 将列表编码为 utf-8,但这给了我一个错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 1: ordinal not in range (128).

所以我用下面的代码检查了我当前的编码,结果发现我有ascii

import sys
reload(sys)
print sys.getdefaultencoding()

所以我将编码更改为utf-8,使用:sys.setdefaultencoding("utf-8"),它正确打印出我现在拥有utf-8

所以我再次选择:

>>>[x.encode('utf-8') for x in list1]

>>>print list1

['w\xc4\x85\xc5\xbc']

但它什么也没改变。它仍然拒绝显示正确的字符。

【问题讨论】:

  • Unicode 字符串在 Python 2.x 中需要 u 前缀:list1 = [u'wąż']
  • 您的编码不是 UTF-8。试试'mbcs'
  • 您已经知道答案了...print list1[0] 显示正确。 Python 2 的默认设置是显示列表中字符串的转义码……所以不要使用 Python 的默认设置打印列表。自己做(或切换到 Python 3,它改变了默认行为并做你想做的事)。

标签: python unicode encoding utf-8 character-encoding


【解决方案1】:

试试这个:

>> meh = u'wąż'.encode('utf-8')

>> print meh.decode('utf-8')
wąż

所以你基本上是根据指定的编码对 unicode 进行编码/解码。

这里描述得很好:https://docs.python.org/2/howto/unicode.html#the-unicode-type

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2016-12-03
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多