Chinaunix首页 | 论坛 | 博客
  • 博客访问: 105148
  • 博文数量: 14
  • 博客积分: 1475
  • 博客等级: 上尉
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-03 23:33
文章分类

全部博文(14)

文章存档

2007年(14)

我的朋友

分类: Python/Ruby

2007-05-04 09:09:51

    在Python开发过程中,常常会遇到这样的问题,很让人头疼:
    ......
    print s
    ......

    Traceback (most recent call last):
      File "", line 1, in ?
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
   
    究其原因,是想要在屏幕上输出的字符,不符合当前设定终端编码.在上面这个例子中,当前终端的编码设置为ascii,而欲输出的字符为utf-8编码,ascii的每个字符的十进制编码都在0 - 128以内,当然无法识别utf-8的编码.

    要解决这个问题,首先修改终端的字符编码设置:
    >>> import sys
    >>> sys.getdefaultencoding()
    'ascii'
   
    可以看到,当前的默认编码是ascii,要修改这个设置,可以在Python安装目录下的Lib/site-packages目录中,新建一个sitecustomize.py文件(也可以建在其它地方,然后手工导入,建在这里,每次启动Python的时候设置将自动生效),内容如下:
    import sys
    sys.setdefaultencoding('utf-8')    #set default encoding to utf-8

    然后可以查看到改变已经生效:
    >>> import sys
    >>> sys.getdefaultencoding()
    'utf-8'

    此时运行程序,如果仍然报告之前的错误,只需要显式地设定输出的编码:
    print s.encode('utf-8')
   
    就可以看到正确的显示了.
阅读(1599) | 评论(0) | 转发(0) |
0

上一篇:Python时间问题

下一篇:Python的转码

给主人留下些什么吧!~~