Python 2.x中的和编码相关的常见问题和注意事项

8 篇文章 0 订阅
2 篇文章 0 订阅

声明:

1.本文不再更新。

2.本人内容,已合并到:

【总结】Python中常见字符编码和解码方面的错误及其解决办法

新帖子总结的更加全面,并且分析了原因,和总结了解决办法,还给出了示例代码。

3.这方面的内容,如有更新,也只会更新到上述新帖子中。


Python 2.x中,的确是,经常性地,容易出现字符编码相关的错误。

即便像我这样的,算是在字符编码折腾了很长时间的,也自认为比较了解字符编码方面的情况了,结果也还是偶尔再次遇到类似的问题。

 

所以,在此特地总结一下,一些常见,Python 2.x中的编码的问题:

注:Python 3.x中的编码,进行了重新设计,相对来说,会很少出现这类编码问题。

关于Python 2.x和Python 3.x,不了解的可以去参考:

【整理】总结Python2(Python 2.x版本)和Python3(Python 3.x版本)之间的区别

 

1.字符(变量)本身是对的,但是(打印)输出时出错或乱码

有时候,虽然已经获得了正常的字符,但是却由于输出过程中,由于输出目标(终端,文件等)中不支持该编码,而导致出现字符显示方面的错误

 

已获得的正常的字符包括两类:

  • Unicode
  • 某种编码的字符:比如UTF-8等

 

要输出的目标,也包括几种:

  • windows的cmd:最最常见的,是Windows XP/Win7中的命令行cmd,多数的默认编码为GBK
  • 文件:但是该文件已经是某种编码的,比如通过codecs模块设置为UTF-8编码了

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Function:
【总结】Python 2.x中的和编码相关的常见问题和注意事项
https://www.crifan.com/summary_python_2_x_string_related_problem_and_note
 
Version:    2012-11-22
Author:     Crifan
"""
 
#测试1:将UTF-8字符,在GBK编码中的cmd中显示
utf8Str = "crifan 在路上";
print "try show UTF-8 string in (GBK encoding) cmd, utf8Str=",utf8Str;
#此处虽然能显示,但是却是乱码:
#try show UTF-8 string in (GBK encoding) cmd, utf8Str= crifan 鍦ㄨ矾涓
 
#测试2:已获得正确的Unicode字符,将其显示在GBK编码的cmd中
 
#任何字符,都可以在:
#http://unicodelookup.com/
#中,查找到对应的unicode的值
 
#can found at:
#http://zhidao.baidu.com/question/500133781.html
slashUStr = "\\u3232\\u6674"; #(有) 晴
decodedUniChars = slashUStr.decode("unicode-escape"); #此处已经可以正常获得对应的两个Unicode字符了
print "decodedUniChars=",decodedUniChars;
#此处在cmd中输出的话,会出现错误的:
#UnicodeEncodeError: 'gbk' codec can't encode character u'\u3232' in position 0: illegal multibyte sequence
#那是因为,Unicode字符:0x3232,是个特殊字符,而此字符,在GBK编码中没有,所以当然无法显示
#所以,当此处,要将值为0x3232的Unicode字符,去尝试编码为GBK,尝试在cmd中输出显示的时候,就出现了UnicodeEncodeError
#即,此种UnicodeEncodeError,是由于输出目标所用字符编码中,没有包含此(特殊)字符而导致的


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值