python的编码问题,一个小例子让人很困惑.

百炼钢丶 2015-10-08 08:44:31


# -*- coding:utf-8 -*-
'''
Created on 2015年10月8日
'''

def main():
s = u"你好"
d = {'id':001, 'text':s}
s1 = "你好"
d1 = {'id':002, 'text':s1}
print d
print s
print "------------"
print d1
print s1

if __name__ == "__main__": main()

输出为:

{'text': u'\u4f60\u597d', 'id': 1}
你好
------------
{'text': '\xe4\xbd\xa0\xe5\xa5\xbd', 'id': 2}
你好

为何直接打印的都是正常的汉字,但是,字典中的却是\uxxxx 或者 \x.. 之类的呢?
请高手解惑.
PS : 在使用 sqlite3 存储中文时, 及使用scrapy抓取中文数据时, 都遇到上面 字典中的情况. 很头疼.
...全文
276 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
popwbob 2015-11-01
  • 打赏
  • 举报
回复
python3中没有问题,在python2中要注意对字典的打印只做变量求值,没有进行编码处理。
ForestDB 2015-10-27
  • 打赏
  • 举报
回复
https://docs.python.org/2/library/codecs.html

>>> a = u'\u4f60'
>>> print a
你
>>> a = '\xe4\xbd\xa0'
>>> print a
你
>>> import codecs
>>> a = u'\u4f60'
>>> b = codecs.encode(a, 'utf8')
>>> b
'\xe4\xbd\xa0'
>>> a = '\xe4\xbd\xa0'
>>> b = codecs.decode(a, 'utf8')
>>> b
u'\u4f60'
>>> 
qq_30751227 2015-10-27
  • 打赏
  • 举报
回复
或者你设置一下你IDE的字体设置,我在eclipse里面是可以正常显示的
qq_30751227 2015-10-26
  • 打赏
  • 举报
回复
这个问题在SDK中都存在,结构体中的unicode打印出来就是\xxxx\xxxx的形式,只有单独打印才能正常显示出中文,暂时没有很好的解决办法。如果你确实想看具体是什么内容,那还是单独打印吧。
kirinlau 2015-10-14
  • 打赏
  • 举报
回复
打印字典时可以直接取键打印,如果直接打印字典则是打印了unicode码,而打印s,s1是直接定义赋值的所以可以直接打印
海楓 2015-10-10
  • 打赏
  • 举报
回复
print出来后是经过系统的终端处理过一次了。 用python3就没这个问题了。
CDSoftwareWj 2015-10-10
  • 打赏
  • 举报
回复
py2.x 要处理好几个码的统一 比如 1. 数据库要用 utf-8 2. 程序要用utf-8声明 3. 使用 encode 和 decode 统一编码到utf-8 比如像你第一个s里的变量就可以 s.encode('utf-8') 就和后面那个一样了
CDSoftwareWj 2015-10-10
  • 打赏
  • 举报
回复

# -*- coding:utf-8 -*-
'''
Created on 2015年10月8日
'''
 
def main():
    s = u"你好"  # 这个是Unicode格式的内码
    d = {'id':001, 'text':s}
    s1 = "你好" # 这个是你声名程序源码时的 utf-8 内码
    d1 = {'id':002, 'text':s1}
py2.x 和 py3 对编码处理不一样,这个要注意 数据库里存入和读取回来要看你要统一到什么编码格式了,只要你明白现在都是什么格式的内码,就不难统一处理
kuoshuang 2015-10-08
  • 打赏
  • 举报
回复
字典里的汉字,要显示的话应该是需要单独取出来打印,如你的代码直接打印 d['text']就可以打印出看字了
小雷同学 2015-10-08
  • 打赏
  • 举报
回复
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def main():
    s = u"你好"
    d = {'id':'001', 'text':s}
    s1 = u"你好"
    d1 = {'id':'002', 'text':s1}
    for key in d:
        print key +':'+ d[key],
    print 
    print s
    print "------------"
    for key in d1:
        print key +':'+ d1[key],
    print 
    print s1
 
if __name__ == "__main__": main()
具体的格式你可以在调整

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧