python 字符 编码 简述

字符编码问题很简单,当你可以区分以下几种概念之后:

  1. 字节编码与字符编码
  2. 字节串与字符串
  3. 文件编码、IDE编码、其他I/O编码
  4. str()与repr()

字节编码与字符编码

ascii unicode是字符编码,编码后的字符编成一个段落是字节编码,utf-8 gbk是字节编码。

字节串与字符串

  • str是字节串,由unicode经过编码(encode)后的字节组成的。使用len来求长度获取的是字节长度。
  • unicode才是严格意义上的字符串,如u'中文'。使用len来求长度时是字符个数。
>>> len("中文")
6
>>> len(u"中文")
2

在程序中处理字符串之前,最好先确定是哪种类型。

>>> isinstance(u'中文', unicode)
True
>>> isinstance(u'中文', str)
False
>>> isinstance('中文', str)
True

通常的处理过程是识别输入编码,然后解码成unicode,在最后输出之前在进行编码,分别使用python内建函数encode和decode,如果确定一个字符串不是unicode类型,这时候需要进行解码,可以使用chardet识别str的编码。

>>> from chardet import detect
>>> a = "中文"
>>> detect(a)
{'confidence': 0.682639754276994, 'encoding': 'KOI8-R'}

文件编码、IDE编码、其他I/O编码

  • Python程序文件的编码 (默认编码ascii 只在文件中有编码时有影响)
  • Python程序运行时环境(IDE)的编码(影响输入和输出)
  • Python程序读取外部文件、网页的编码 (影响输入与输出)

当我们发现乱码时,就要区分是第二还是第三种情形,终端打印是IDE相关,数据库属于其他I/O相关,之所以出现乱码就是编码不匹配,我们需要确定的是不匹配的双方和双方所对应的编码。

对于系统的编码可以使用sys来获取,这影响终端显示。

>>> import sys
>>> sys.getdefaultencoding()
'ascii'

str()与repr()

reprstr这两个方法都是用于显示的,str是面向用户的,而repr面向程序员。print首先尝试的是str函数,这就是我们unicode字符串打印出来和字节串一样的原因。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字符集和编码简介 在编程中常常可以见到各种字符集和编码,包括ASCII,MBCS,Unicode等字符集。确切的说...
    兰山小亭阅读 8,678评论 0 13
  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 3,169评论 0 7
  • 我家,那个地方对于很多人来说,就是鸟不拉屎,鸡不下蛋的山旮旯 我爸妈没有上过学,一个大字儿都不识,所以这么多年来,...
    熊二小姐阅读 1,182评论 1 0
  • 第一次生病第三天。 醒来的时间是差不多2:20,中间20多分钟带奥利奥去了趟客厅,朋友圈逛了一遍。 西安的时候,我...
    躲猫儿阅读 225评论 0 0
  • 儿子上初二了,感赏儿子能很快适应新学期生活,独立自主。感赏儿子放学后能很快到家没有在外逗留玩耍的习惯。感赏儿子每天...
    kitcui阅读 186评论 0 1