`
lc_wangchao
  • 浏览: 34165 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Python中的字符串编解码

阅读更多

unicode和str类型

Python中字符串有两种写法,比如,如果把“中国”这一字符串赋值给变量可以这样写: 

 

str = '中国'

 或者

 

str = u'中国'

 前者定义了一个字符串,而后者则定义了一个unicode编码的字符串。

首先说一下第二种形式。在Python中,为了统一不同编码的字符串的表示,同时为简化字符串的处理,其内部提供了一种统一化的文本类型unicode,即第二种形式的字符串。unicode类型的字符串只处理文本,并把文本以unicode形式在内部存储。unicode类型的作用只用于代码内部字符串的处理,而不关心外部文本的具体格式,可以看作是文本的抽象表示。

但是实际上外界文本的不同编码格式众多。比如向一个网站提交数据,其有可能要求utf-8的编码或者gbk的编码,不同的编码类型的内容是不同的, 这就需要将我们程序内部字符串转换成可以与外界交互的编码(如:utf-8,ascii,gdb等)。通常我们使用str类型来操作。严格来讲,str并不一定是文本,它也有可能是二进制的内容,它提供的其实是字节的组合(unicode类型提供的是unicode字符即的组合),只是如果str中刚好是某种形式编码的文本,它便可以当做文本处理(print等)。

我们可以通过在Python的命令行中执行以下代码来看到两种格式的不同:

对于str:

>>> str = '中国';
>>> for c in str:
...     c
... <回车>

输出:
'\xe4'
'\xb8'
'\xad'
'\xe5'
'\x9b'
'\xbd'

 对于unicode:

>>> str = u'中国'
>>> for c in str:
...     c
... <回车>

输出:
u'\u4e2d'
u'\u56fd'

 前者输出了6行,而后者只输出了2行。这是由于两种类型对字符串的不同理解造成的。前者将字符串理解为字节的组合,由于系统默认采用utf-8编码,字符串'中国'其实是有四个字节组合而成的。后者将字符串理解为文本字符的组合,u'中国'被看做“中”和“国”两个字的unicode码组合。

编码的转换

  • unicode与str的转换

我们用encode方法来对unicode字符串编码成str字符串:

>>> unicode_str = u'中国'
>>> unicode_str
u'\u4e2d\u56fd'
>>> utf8_str = unicode.encode('utf-8');
>>> utf8_str
'\xe4\xb8\xad\xe5\x9b\xbd'

 使用decode方法将str转换成unicode:

>>> utf8_str = '中国'
>>> utf8_str
'\xe4\xb8\xad\xe5\x9b\xbd'
>>> unicode_str = utf8_str.decode('utf-8')
>>> unicode_str
u'\u4e2d\u56fd'

 在encode或者decode的时候需要手动传入编码方式来指定str字符串的编码

 

  • 不同编码的转换

有时我们可能需要以一种编码方式从数据源中获取文本,然后以另一种编码方式保存到另外的数据源中。可以利用unicode作为中间变量进行转换:

>>> utf8_str = '中国'
>>> utf8_str
'\xe4\xb8\xad\xe5\x9b\xbd'
>>> unicode_str = utf8_str.decode('utf-8')
>>> gbk_str = unicode_str.encode('gbk')
>>> gbk_str
'\xd6\xd0\xb9\xfa'

 由于gbk使用两个字节保存汉字,所以转换后总共是四个字节。

 

编码检测

有时候,我么可能不知道一个字符串是什么编码,chardet工具可以帮助我们检测未知编码的字符串编码格式。

首先安装chardet,在shell中:

 

$ sudo easy_install chardet

 安装完就可以使用了,进入Python命令行:

 

>>> import chardet
>>> str = '中国'
>>> chardet.detect(str)
{'confidence': 0.7525, 'encoding': 'utf-8'}

 结果中encoding是猜测的编码,confidence是可信度,之后如何处理就看你了。

0
0
分享到:
评论

相关推荐

    Python中字符串与编码示例代码

    在最新的Python 3版本中,字符串是以Unicode编码的,即Python的字符串支持多语言 编码和解码  字符串在内存中以Unicode表示,在操作字符串时,经常需要str和bytes互相转换  如果在网络上传输或保存到磁盘上,则从...

    字典序解码输入编码输出字符串

    对于给定一个字符串的编号,迅速解码出它在上述字典中的字符串编码。 数据输入 输入数据由input.txt提供。文件的第一行为一个整数N (1,000),表示字符串 的编号。 数据输出 输出该编号做对应的字符串编码到ouput.txt...

    Python字符串相关操作的整理

    Python字符串的驻留机制、查询操作、大小写转换、内容对齐、劈分方法、判断字符串的操作方法、比较、切片、格式化、编码和解码等基本操作的整理

    python中字符串的编码与解码详析

    GBK:国家简体中文字符集和繁体字符集,兼容ASCII,占两个字节 Unicode:能够表示全世界上所有的字符,Unicode有人说占4个字节也有人说占2个字节,但中文占2个字节 UTF-8:Unicode的压缩版,占1~3个字节,其中...

    测量程序编制 - python 13数据类型:String(字符串)-字符串内建函数.pptx

    Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。 encode(encoding='UTF-8',errors='strict') 以 encoding 指定...

    Python中文全攻略

    在 Python 中有两种默认的字符串:str 和unicode。在Python 中一定要注意区分“Unicode 字符 串”和“unicode 对象”的区别。后面所有的“unicode 字符串”指的都是python 里的“unicode 对象”。 事实上在Python 中...

    基础算法-python字符串加密五种方法

    【基础算法】-python字符串加密五种方法 # 1. url编码 from urllib.parse import quote, unquote name = "王大锤" # 编码 utf8_name = quote(name) # utf-8 print(utf8_name) # %E7%8E%8B%E5%A4%A7%E9%94%A4 长度...

    Python-Decodify递归地检测和解码编码的字符串

    Decodify - 递归地检测和解码编码的字符串

    python解码方式.docx

    在Python中,我们可以使用encode()函数将字符串编码为指定的格式,例如: ``` str = "Hello, world!" str_utf8 = str.encode("utf-8") print(str_utf8) python解码方式全文共3页,当前为第1页。 ``` python解码方式...

    python去掉 unicode 字符串前面的u方法

    我们要想得到正确的 unicode 字符串首先就必须先将这个字符串转成非 unicode 字符串, 然后再进行解码。按照普通的办法进行 encode 肯定是不行的,因为这不是一个正确的 unicode 字符串: In [1]: u'\xe4\xbd\xa0\...

    python去除删除数据中\u0000\u0001等unicode字符串的代码

    补充知识:Python中,如何将反斜杠u类型(\uXXXX)的字符串,转换为对应的unicode的字符 【背景】 类似于: \u3232\u6674 的字符串,转换为对应的unicode字符。 【解决过程】 对应的,可以通过Python的decode函数去解码...

    对python中url参数编码与解码的实例详解

    在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码。 二、关键代码 1、url编码 对字符串编码用urllib.parse包下的quote(string, safe=’/’, encoding=None, errors=None)方法。 对json格式的参数...

    python 中文字符串的处理实现代码

    &gt;&gt;&gt; teststr = ‘我的eclipse不能正确的解码gbk码!’ &gt;&gt;&gt; teststr ‘\xe6\x88\x91\xe7\x9a\x84eclipse\xe4\xb8\x8d\xe8\x83\xbd\xe6\xad\xa3\xe7\xa1\xae\xe7\x9a\x84\xe8\xa7\xa3\xe7\xa0\x81gbk\xe7\xa0\x81\xef\...

    Python3字符串encode与decode的讲解

    大家好,很久没更新了,也是年底了最近比较忙,同时也在研究python的其他内容,毕竟是...1:字符串通过编码转换为字节码,字节码通过解码转换为字符串 str—&gt;(encode)—&gt;bytes,bytes—&gt;(decode)—&gt;str import sys p

    python读取中文txt文本的方法

    字符串在Python2.7内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码成unicode,再从unicode编码成另一种编码。 先用一些编辑器(如editplus )看一下你...

    Python字符串的encode与decode研究心得乱码问题解决方法

    字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。  decode的作用是将...

    简单介绍Python中的decode()方法的使用

    decode()方法使用注册编码的编解码器的字符串进行解码。它默认为默认的字符串编码。 语法 以下是decode()方法的语法: str.decode(encoding='UTF-8',errors='strict') 参数 encoding — 这是所使用的编码。对于...

    mbstrdecoder:用于多字节字符串解码器的Python库

    是一个用于多字节字符串解码器的Python库。 安装 从PyPI安装 pip install mbstrdecoder 从PPA安装(对于Ubuntu) sudo add-apt-repository ppa:thombashi/ppa sudo apt update sudo apt install python3-...

    decoder:一个简单的脚本,尝试以各种编码机制对字符串进行解码,而不管其(原始)类型如何

    一个简单的脚本,尝试使用各种编码机制对字符串进行解码,而不论其类型(原始)是什么。 一线没有多大意义,对吗? 别担心,我知道了! 假设您有一个字符串(从某个地方获得,可能是boot2root机器,ctf等) ,您...

    代理:在Python 3中编码和解码成对的代理字符

    surrogates是经过测试的小型Python 3软件包,用于编码和解码Python字符串中的成对的。 它是根据获得。 安装 # pip3 install --user surrogates 用法 # python3 -m IPython [..] In [1]: import surrogates In [2]: ...

Global site tag (gtag.js) - Google Analytics