首页 > 编程问答 >如何将unicode编码为字节,以便可以检索到原始字符串?在Python 3.11中

如何将unicode编码为字节,以便可以检索到原始字符串?在Python 3.11中

时间:2024-07-25 15:24:19浏览次数:13  
标签:python character-encoding

在 python 3.11 中,我们可以对字符串进行编码,如:

string.encode('ascii', 'backslashreplace')

这对于说: hellö => hell\\xf6

但是当我插入时 hellö w\\xf6rld I get hell\\xf6 w\\xf6rld (注意第二个有一个看起来像字符转义序列的文字部分)

或者换句话说,以下内容成立:

'hellö wörld'.encode('ascii', 'backslashreplace') == 'hellö w\\xf6rld'.encode('ascii', 'backslashreplace')

这显然意味着数据已因编码而丢失。

有没有办法让python真正正确编码?那么反斜杠本身也被转义了吗?或者图书馆可以这样做吗?


你所观察到的行为是 ASCII 编码和反斜杠替换错误处理方式的预期结果。目的是创建一个 ASCII 安全的字符串表示,其中不可表示的字符被它们的十六进制等价物替换。

问题在于,该方法不能区分原本存在的 \xf6 和因编码产生的 \xf6 。因此,解码时,无法可靠地区分这两者。

解决方案:

为了解决这个问题,你需要使用一种编码方案,该方案可以区分字面反斜杠和用于表示不可表示字符的反斜杠。

一个选择是使用 'unicode-escape' 编码:

>>> 'hellö w\\xf6rld'.encode('unicode-escape')
b'hell\\xf6 w\\\\xf6rld'
>>> 'hellö wörld'.encode('unicode-escape')
b'hell\\xf6 w\\xf6rld'

如你所见, 'unicode-escape' 编码会将原始字符串中的字面反斜杠转义为 \\\\ ,同时将表示不可表示字符的反斜杠保留为 \xf6 。解码时,可以正确地反转此过程。

>>> b'hell\\xf6 w\\\\xf6rld'.decode('unicode-escape')
'hellö w\\xf6rld'
>>> b'hell\\xf6 w\\xf6rld'.decode('unicode-escape')
'hellö wörld'

其他选择:

  • 使用 Python 的内置序列化方法: 如果你需要存储或传输数据,请考虑使用 pickle json 等模块,这些模块处理字符串编码并确保正确解码。

  • Base64 编码: 如果你需要一个 ASCII 安全的表示,并且不介意增加一些开销,可以使用 base64 模块。

记住,选择最合适的编码方案取决于你的具体需求和限制。

标签:python,character-encoding
From: 78791781

相关文章

  • python flask允许跨域
    flask接口支持跨域设置方法在Flask中,可以通过安装flask-cors扩展来支持跨域请求。下面是使用flask-cors扩展的示例代码:fromflaskimportFlaskfromflask_corsimportCORS#ipinstallflask-corsapp=Flask(__name__)CORS(app)可以通过CORS扩展的origins参数......
  • 在 Python 中动态定义文字字符串排列的并集
    我有一个字符串列表:strings=['a','b','c']我想声明列表中所有可能的有序对的Union类型。硬编码,这看起来像:Literal我如何动态定义CustomType=Literal['ab','ac','aa','ba','bb','bc�......
  • 关于 Python 中装饰器缓存的困惑
    我正在使用Python装饰器来实现函数的缓存。我了解缓存结果以提高性能的基本概念,但我正在努力解决如何处理不同的函数参数并确保底层数据更改时缓存更新。我已经实现了一个基本装饰器,它将函数结果存储在基于参数的字典。但是,此方法无法处理函数参数可能具有复杂结构(如嵌套列......
  • Python:__add__ 和 +,浮点数和整数的不同行为
    当将整数值添加到浮点值时,我意识到如果在浮点上调用该方法可以正常工作,例如:__add__但如果在整数上调用则不行:>>>n=2.0>>>m=1>>>n.__add__(m)3.0起初我认为|||只是对>>>m.__add__(n)NotImplemented和__add__类型的实现方式不同(例如f......
  • python中scrapy爬取数据get()与getall()区别
    在使用scrapy进行爬取数据的时候,有些时候需要爬取的是一段文本,或者一个div里面有很多内容,这时候我们就要使用到get()或者getall()来获取数据: get():是获取的满足条件的第一个数据。getall():是获取的满足条件的所有数据。scrapyget()getall()原理在Scrapy中,get(......
  • python—NumPy基础(3)
    文章目录算术函数算术函数的使用算术函数中out参数的使用mod()函数的使用统计函数power()函数的使用median()函数的使用mean()函数的使用函数的使用其他常用函数tile()和repeat()函数的使用roll()函数的使用resize()函数的使用replace()和put()函数的使savetxt()和lo......
  • Python爬虫:代理ip电商数据实战
    引言:数据访问管理引发的烦恼作为一名Python博主,爬虫技能对于获取和分析数据至关重要,经常爬一下,有益身心健康嘛。爬虫技术对很多人来说,不仅仅是一种工具,更像是一种艺术,帮助我们从互联网中,捕捉到有价值的信息。我经常就会用爬虫来爬取一些所需的数据,用来进行数据分析和模型训......
  • python科学计算:加速库numba —— 安装和试用
    安装(anaconda环境下)condainstallnumbaDemo代码:fromnumbaimportjitfromnumpyimportarangeimportnumpyimporttime@jitdefsum2d(arr):M,N=arr.shaperesult=0.0foriinrange(M):forjinrange(N):result+=a......
  • Python - Selenium抓取淘宝直播间评论(可使用无头模式)
    Python-Selenium抓取淘宝直播间评论(可使用无头模式)下面介绍如何使用python中的selenium简单抓取淘宝直播间实时评论。友情提醒,仅供学习交流使用,请勿用于非法用途!一、创建python项目1.在目录下新建main.py和venv虚拟环境:创建虚拟环境:python-mvenvvenv激活虚拟环......
  • 需要帮助来提取此 XML 节点 - Python 中的 Excel 连接字符串
    我有一个Python程序,打开Excel(XLSX)文件,并尝试查找<connection>节点。这是connections.xml文件中的完整XML。<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><connectionsxmlns="http://schemas.op......