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

作者:气球会膨胀 时间:2023-11-02 14:46:31 

编码和解码及\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!'

来源:https://blog.csdn.net/weixin_44895142/article/details/107775166

标签:python,编码,解码,\x,\u
0
投稿

猜你喜欢

  • Python时间差中seconds和total_seconds的区别详解

    2022-10-04 15:00:49
  • 应用技术:如何通过SQLyog分析MySQL数据库

    2009-03-25 16:53:00
  • sqlserver获取当前日期的最大时间值

    2011-09-30 11:44:50
  • 在python下实现word2vec词向量训练与加载实例

    2022-06-12 23:49:05
  • PyTorch 普通卷积和空洞卷积实例

    2021-01-06 16:42:57
  • Python中移除List重复项的五种方法

    2021-12-11 20:15:38
  • Python如何实现定时器功能

    2023-04-13 23:19:28
  • 在Django的模型中执行原始SQL查询的方法

    2022-12-21 17:24:40
  • 提高python代码可读性利器pycodestyle使用详解

    2023-09-04 11:22:04
  • Java基础开发之JDBC操作数据库增删改查,分页查询实例详解

    2024-01-15 04:16:28
  • python等间距取值方式

    2022-03-15 23:19:26
  • CSS3属性box-shadow图层阴影效果使用教程

    2010-05-16 14:54:00
  • python中实现数组和列表读取一列的方法

    2021-04-07 08:04:48
  • Python实现读取字符串按列分配后按行输出示例

    2023-08-07 19:39:14
  • matplotlib绘制多个子图(subplot)的方法

    2023-01-17 08:27:45
  • 关于Vue的异步组件

    2024-05-09 10:52:35
  • sqlserver 动态创建临时表的语句分享

    2024-01-17 23:57:45
  • JavaScript开发人员的10个关键习惯小结

    2024-04-18 09:51:09
  • Python使用ntplib库同步校准当地时间的方法

    2021-10-07 13:55:32
  • Web2.0视觉风格进化论 之二

    2007-11-03 20:10:00
  • asp之家 网络编程 m.aspxhome.com