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是可信度,之后如何处理就看你了。
相关推荐
在最新的Python 3版本中,字符串是以Unicode编码的,即Python的字符串支持多语言 编码和解码 字符串在内存中以Unicode表示,在操作字符串时,经常需要str和bytes互相转换 如果在网络上传输或保存到磁盘上,则从...
对于给定一个字符串的编号,迅速解码出它在上述字典中的字符串编码。 数据输入 输入数据由input.txt提供。文件的第一行为一个整数N (1,000),表示字符串 的编号。 数据输出 输出该编号做对应的字符串编码到ouput.txt...
Python字符串的驻留机制、查询操作、大小写转换、内容对齐、劈分方法、判断字符串的操作方法、比较、切片、格式化、编码和解码等基本操作的整理
GBK:国家简体中文字符集和繁体字符集,兼容ASCII,占两个字节 Unicode:能够表示全世界上所有的字符,Unicode有人说占4个字节也有人说占2个字节,但中文占2个字节 UTF-8:Unicode的压缩版,占1~3个字节,其中...
Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。 encode(encoding='UTF-8',errors='strict') 以 encoding 指定...
在 Python 中有两种默认的字符串:str 和unicode。在Python 中一定要注意区分“Unicode 字符 串”和“unicode 对象”的区别。后面所有的“unicode 字符串”指的都是python 里的“unicode 对象”。 事实上在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 长度...
Decodify - 递归地检测和解码编码的字符串
在Python中,我们可以使用encode()函数将字符串编码为指定的格式,例如: ``` str = "Hello, world!" str_utf8 = str.encode("utf-8") print(str_utf8) python解码方式全文共3页,当前为第1页。 ``` python解码方式...
我们要想得到正确的 unicode 字符串首先就必须先将这个字符串转成非 unicode 字符串, 然后再进行解码。按照普通的办法进行 encode 肯定是不行的,因为这不是一个正确的 unicode 字符串: In [1]: u'\xe4\xbd\xa0\...
补充知识:Python中,如何将反斜杠u类型(\uXXXX)的字符串,转换为对应的unicode的字符 【背景】 类似于: \u3232\u6674 的字符串,转换为对应的unicode字符。 【解决过程】 对应的,可以通过Python的decode函数去解码...
在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码。 二、关键代码 1、url编码 对字符串编码用urllib.parse包下的quote(string, safe=’/’, encoding=None, errors=None)方法。 对json格式的参数...
>>> teststr = ‘我的eclipse不能正确的解码gbk码!’ >>> 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\...
大家好,很久没更新了,也是年底了最近比较忙,同时也在研究python的其他内容,毕竟是...1:字符串通过编码转换为字节码,字节码通过解码转换为字符串 str—>(encode)—>bytes,bytes—>(decode)—>str import sys p
字符串在Python2.7内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码成unicode,再从unicode编码成另一种编码。 先用一些编辑器(如editplus )看一下你...
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 decode的作用是将...
decode()方法使用注册编码的编解码器的字符串进行解码。它默认为默认的字符串编码。 语法 以下是decode()方法的语法: str.decode(encoding='UTF-8',errors='strict') 参数 encoding — 这是所使用的编码。对于...
是一个用于多字节字符串解码器的Python库。 安装 从PyPI安装 pip install mbstrdecoder 从PPA安装(对于Ubuntu) sudo add-apt-repository ppa:thombashi/ppa sudo apt update sudo apt install python3-...
一个简单的脚本,尝试使用各种编码机制对字符串进行解码,而不论其类型(原始)是什么。 一线没有多大意义,对吗? 别担心,我知道了! 假设您有一个字符串(从某个地方获得,可能是boot2root机器,ctf等) ,您...
surrogates是经过测试的小型Python 3软件包,用于编码和解码Python字符串中的成对的。 它是根据获得。 安装 # pip3 install --user surrogates 用法 # python3 -m IPython [..] In [1]: import surrogates In [2]: ...