我有这样的代码:
#!/usr/bin/python
import psycopg2
import psycopg2.extensions
conn = psycopg2.connect(dbname='my_database_name', ...)
cur = conn.cursor()
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE, conn)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY, conn)
cur.execute("SELECT * FROM t0;")
res = cur.fetchall()
print conn.encoding
print res
print res[0][0] # Output is true
print [res[0][0]]但输出结果是:
UTF8
[(u'\u0410\u0411', u'\u0412\u0413')]
АБ
[u'\u0410\u0411']为什么只有第三行是真的?如何更改字母上的u‘\u*’?
发布于 2019-07-28 23:13:27
这里的问题很简单,就是Python2打印unicode类型的方式,这也是Python3在2008年创建的原因之一。
在Python 2中
$ python2
>>> s = u'АБ'
>>> type(s)
<type 'unicode'>
>>> print(s)
АБ
>>> print([s])
[u'\u0410\u0411']但在Python 3中
$ python3
>>> s = u'АБ'
>>> type(s)
<class 'str'>
>>> print(s)
АБ
>>> print([s])
['АБ']对于您的问题“如何更好地打印字符串数组”,最简单的答案是“使用Python 3!”
然而,不幸的是,您可能会被Python 2卡住(如果是这样的话,很抱歉)。如果你坚持使用Python 2,你可以用以下命令来伪造它:
$ python2
>>> s = u'АБ'
>>> print([s])
[u'\u0410\u0411']
>>> print('[' + ''.join(s) + ']')
[АБ]它不是很漂亮,但它是有效的。希望您能够切换到Python3(或者其他人可能会有一个比这个hack更好的Python2答案)。
https://stackoverflow.com/questions/57242089
复制相似问题