python中的编码和解码及\x和\u问题

目录
  • 编码和解码及\x和\u问题
  • python解析 \x 和 \u "乱码"
    • python2.7解析方法
    • python3解析方法

编码和解码及\x和\u问题

“字符在内存里的表示是unicode,如果要存盘或者发到网络就经过utf-8,然后对端收到依次解码。”

Python 3里面,str在内存里是unicode表示的

‘中文’ == ‘\u4e2d\u6587’

'中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
 '\u4e2d\u6587'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'

1个汉字用unicode表示一般是2个byte,

例如:

‘中’=\u4e2d(十六进制写法【即2bytes】)

'A'.encode('ascii')
>>>b'A'
('\u0041').encode('ascii')
>>>b'A'
'A'.encode('utf-8')
>>>b'A'

note: b’A’和’A’

在python 3中

b’A’是ascii编码的01010101的字节,占1个byte;

'A‘是在内存里按unicode形式编码的/ucc,占的是2个byte。

unicode编码后是bytes,如果这个字节范围不在ascii的表示范围内,就会显示成\x(十六进制形式)

例如:

  • 汉字编码成bytes,去查看这个bytes肯定只能看到\x系列,因为这个bytes的内容肯定不在ascii范围内;
  • 英文编码成bytes可以看到对应的英文字母,本质上它还是没有含义的010101的字节流而不是字符。
"abc".encode('utf-8')
b'abc'
'中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
1个汉字,按utf-8编码,一般是3个bytes,\xe4是十六进制表示的1个byte。

相同的英文字符,ascii编码和utf-8编码的结果是一致的,因为这两种编码都使用一个byte表示一个英文字符

'abc'.encode('ascii').decode('utf-8')
'abc'

可以用一个编码然后再另一个解码,是可以成功还原的。但一般是不会这么做的。

ord函数获取字符的整数表示和chr数把编码转换为对应的字符

 ord('A')
65
ord('中')
20013
chr(66)
'B'
chr(25991)
'文'

对str和对bytes用len,意义是不同的。

len(str)统计字符数,len(bytes)统计bytes数

>>> len('中文')
2
 len(str)统计字符数
>>> bt1 = '中文'.encode('gb2312')
>>> bt2 = '中文'.encode('utf-8')
>>> bt1
b'\xd6\xd0\xce\xc4'
>>> bt2
b'\xe4\xb8\xad\xe6\x96\x87'
>>> len(bt1)
4
>>> len(bt2)
6

以Unicode表示的str通过encode()方法可以编码为指定的bytes

python解析 \x 和 \u "乱码"

参数错误

\xe5\x8f\x82\xe6\x95\xb0\xe6\x9c\x89\xe8\xaf\xaf  

今日已经完成过此任务,请明日再做此任务吧!

\u4eca\u65e5\u5df2\u7ecf\u5b8c\u6210\u8fc7\u6b64\u4efb\u52a1\uff0c\u8bf7\u660e\u65e5\u518d\u505a\u6b64\u4efb\u52a1\u5427!

python2.7解析方法

>>> print(u'\xe5\x8f\x82\xe6\x95\xb0\xe6\x9c\x89\xe8\xaf\xaf  '.encode('unicode_escape').decode('string_escape')) 
>>>print('\u4eca\u65e5\u5df2\u7ecf\u5b8c\u6210\u8fc7\u6b64\u4efb\u52a1\uff0c\u8bf7\u660e\u65e5\u518d\u505a\u6b64\u4efb\u52a1\u5427!'.decode('unicode_escape'))

python3解析方法

>>>('\xe5\x8f\x82\xe6\x95\xb0\xe6\x9c\x89\xe8\xaf\xaf  '.encode('raw_unicode_escape')).decode()
>>>'\u4eca\u65e5\u5df2\u7ecf\u5b8c\u6210\u8fc7\u6b64\u4efb\u52a1\uff0c\u8bf7\u660e\u65e5\u518d\u505a\u6b64\u4efb\u52a1\u5427!'

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详解python中文编码问题

    目录 1.        在Python中使用中文 1.1     Windows控制台 1.2     Windows IDLE(在Shell上运行) 1.3     在IDLE上运行代码 1.4     Windows Eclipse 1.5     从文件读取中文 1.6     在数据库中使用中文 1.7     在XML中使用中文 1.        在Python中使用中文 在Python中有两种默认的字符串:str和unicode.在Python中一定要注意区分"Unicode字符

  • 彻底搞懂Python字符编码

    不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError.UnicodeDecodeError 错误,每当遇到错误我们就拿着 encode.decode 函数翻来覆去的转换,有时试着试着问题就解决了,有时候怎么试都没辙,只有借用 Google 大神帮忙,但似乎很少去关心问题的本质是什么,下次遇到类似的问题重蹈覆辙,那么你有没有想过一次性彻底把 Python 字符编码给搞懂呢? 完全理解字符编码 与 Python 的渊源前,我们有

  • python编码问题汇总

    目录 一.了解字符编码的知识储备 1. 文本编辑器存取文件的原理(nodepad++,pycharm,word) 2. python解释器执行py文件的原理 二.字符编码简介 三.字符编码的发展史 四.字符编码的使用 五.Python2与python3编码区别 1.在python2中有两种字符串类型str和unicode 2. 在python3中也有两种字符串类型str和bytes 一.了解字符编码的知识储备 1. 文本编辑器存取文件的原理(nodepad++,pycharm,word)  打开

  • Python中字符编码简介、方法及使用建议

    1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号.不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础. 1.2. MBCS 然而计算机世界里很快就有了其他语言,单字节的ASCII已无法满足需求.后来每个语言就制定了一套自己的编码,由于单字节

  • python中的编码和解码及\x和\u问题

    目录 编码和解码及\x和\u问题 python解析 \x 和 \u "乱码" python2.7解析方法 python3解析方法 编码和解码及\x和\u问题 “字符在内存里的表示是unicode,如果要存盘或者发到网络就经过utf-8,然后对端收到依次解码.” Python 3里面,str在内存里是unicode表示的 ‘中文’ == ‘\u4e2d\u6587’ '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87'  '\u4e2d\u65

  • 详解Python中的编码问题(encoding与decode、str与bytes)

    1 引言 在文件读写及字符操作时,我们经常会出现下面这几种错误: TypeError: write() argument must be str, not bytes AttributeError: 'URLError' object has no attribute 'code' UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' inposition 5747: illegal multibyte sequence 这些

  • python密码学Base64编码和解码教程

    目录 Base64编码 编码程序 输出 解码程序 输出 差异在ASCII和base64之间 缺点 Base64编码 Base64编码将二进制数据转换为文本格式,通过通信通道传递,用户可以安全地处理文本. Base64也称为隐私增强电子邮件(PEM),主要用于电子邮件加密过程. Python包含一个名为 BASE64的模块其中包括下面给出的两个主要功能 : base64.decode(输入,输出) : 它解码指定的输入值参数并将解码的输出存储为对象. Base64.encode(输入,输出) ;它

  • 彻彻底底地理解Python中的编码问题

    Python处理文本的功能非常强大,但是如果是初学者,没有搞清楚python中的编码机制,也经常会遇到乱码或者decode error.本文的目的是简明扼要地说明python的编码机制,并给出一些建议. 问题1:问题在哪里? 问题是我们的靶子,心中没有问题去学习就会抓不住重点. 本文使用的编程环境是centos6.7,python2.7.我们在shell中键入python以打开python命令行,并键入如下两句话: s = "中国zg" e = s.encode("utf-8

  • JavaScript中的编码和解码函数

    js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 1. 传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断. 例如: 2. 进行url跳转时可以整体使用encodeURI 例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&

  • VC中BASE64编码和解码使用详解

    BASE64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本.完整的BASE64定义可见 RFC1421和 RFC2045.编码后的数据比原始数据略长,为原来的4/3.在电子邮件中,根据RFC822规定,每76个字符,还需要加上一个回车换行. 转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位.数据不足3byte的话,于缓冲区中剩下的Bit用0补足.然后,每次取出6个bit,按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXY

  • python中的编码知识整理汇总

    问题 在平时工作中,遇到了这样的错误: UnicodeDecodeError: 'ascii' codec can't decode byte 想必大家也都碰到过,很常见 .于是决定对python的编码做一个整理和学习. 基础知识 在python2.x中,有两种数据类型,unicode和str,这两个都是basestring的子类 >>> a = '中' >>> type(a) <type 'str'> >>> isinstance(a,b

  • Python中json格式数据的编码与解码方法详解

    本文实例讲述了Python中json格式数据的编码与解码方法.分享给大家供大家参考,具体如下: python从2.6版本开始内置了json数据格式的处理方法. 1.json格式数据编码 在python中,json数据格式编码使用json.dumps方法. #!/usr/bin/env python #coding=utf8 import json users = [{'name': 'tom', 'age': 22}, {'name': 'anny', 'age': 18}] #元组对象也可以

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

    1. 常用的编码 ASCII:只能表示一些字母,数字和特殊的字符,占一个字节 GBK:国家简体中文字符集和繁体字符集,兼容ASCII,占两个字节 Unicode:能够表示全世界上所有的字符,Unicode有人说占4个字节也有人说占2个字节,但中文占2个字节 UTF-8:Unicode的压缩版,占1~3个字节,其中中文占三个字节 2.补充:计算机表示的单位: bit: 位,计算机最小的表示单位 bytes:字节,最小的存储单位,1bytes=8bit,1bytes简写成1B 1KB = 1024B

随机推荐