美文网首页
Python中常用的文本转义及编码

Python中常用的文本转义及编码

作者: 韩志超 | 来源:发表于2020-10-21 10:14 被阅读0次

每种语言都有其关键字和保留字符,这样为了能这些特殊字符能正常显示,就需要转义,如Python中\n代表回车,HTML中 代表空格等等。
Python中的''是转义控制符,如果要表达\本身则需要使用'\',常见于Windows系统的路径中(使用'/'则不需要转义)。

unicode转义

有时候我们在响应文本中会看到一些\u开头的字符串,如下例。

>>> import requests
>>> res = requests.get('https://httpbin.org/get?name=张三&age=12')
>>> print(res.text)
{
  "args": {
    "age": "12",
    "name": "\u5f20\u4e09"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.24.0",
    "X-Amzn-Trace-Id": "Root=1-5f8f8e42-6d1f34a2691b8bec579454a3"
  },
  "origin": "111.194.126.253",
  "url": "https://httpbin.org/get?name=\u5f20\u4e09&age=12"
}

响应体文本中,name后面对应是"\u5f20\u4e09",这是HTTP请求在传输时为了确保符合ASCII编码对其他字符集做的unicode转义。
注意这个只是打印结果,我们看看res.text的本来样子。

>>> res.text
'{\n  "args": {\n    "age": "12", \n    "name": "\\u5f20\\u4e09"\n  }, \n  "headers": {\n    "Accept": "*/*", \n    "Accept-Encoding": "gzip, deflate", \n    "Host": "httpbin.org", \n    "User-Agent": "python-requests/2.24.0", \n    "X-Amzn-Trace-Id": "Root=1-5f8f8e42-6d1f34a2691b8bec579454a3"\n  }, \n  "origin": "111.194.126.253", \n  "url": "https://httpbin.org/get?name=\\u5f20\\u4e09&age=12"\n}\n'

可以看出name的实际值是"\\u5f20\\u4e09""\u5f20\u4e09" != "\\u5f20\\u4e09",看下如下例子。

>>> name = "\u5f20\u4e09"
>>> name
'张三'
>>> name = "\\u5f20\\u4e09"
>>> name
'\\u5f20\\u4e09'
>>> print(name)
\u5f20\u4e09

可见 "\u5f20\u4e09" 就是"张三",而"\u5f20\u4e09"是一个显示为"\u5f20\u4e09"的字符串。
unicode转义-解码
如何将"\u5f20\u4e09"转为"张三"呢?方法如下
先按utf-8编码回二进制,然后按unicode-escape方式解码为正常文本

>>> name = "\\u5f20\\u4e09"
>>> name.encode('utf-8').decode('unicode-escape') 
'张三'

unicode转义-编码
如果想将"张三"转为unicode转义字符只需要反向操作即可。

>>> name = "张三"
>>> name.encode('unicode-escape').decode('utf-8')
'\\u5f20\\u4e09'

GBK转义

有些中文网页中有时会使用GBK编码,形式为\x开头的字符如。

>>> name = "张三"
>>> name.encode('gbk')
b'\xd5\xc5\xc8\xfd'

这个二进制字符串b'\xd5\xc5\xc8\xfd'就是"张三",但如果我们拿到一个"\xd5\xc5\xc8\xfd"的普遍字符串呢?
操作方法如下。

>>> name = "\xd5\xc5\xc8\xfd"
>>> name
'ÕÅÈý'
>>> name.encode('latin1').decode('unicode-escape').encode('latin1').decode('gbk')
'张三'
>>> name = "\\xd5\xc5\\xc8\\xfd"
>>> name.encode('latin1').decode('unicode-escape').encode('latin1').decode('gbk')
'张三'

无论是"\xd5\xc5\xc8\xfd"还是"\\xd5\xc5\\xc8\\xfd"都可以。

html转义

在有些情况下我们需要解码html文档中的转义字符,或者进行编码,操作如下。

>>> import html
>>> args='{"e": 5, "f": 6}'
>>> html.escape(args)  # 转义
'{"e": 5, "f": 6}'
>>> html.unescape('{"e": 5, "f": 6}')   # 转回
'{"e": 5, "f": 6}'

url编码

在url中需要对一些特殊字符进行编码,比如在浏览器地址栏中输入https://httpbin.org/get?name=张三&age=12'
然后复制-粘贴,你会发现网址变为了https://httpbin.org/get?name=%E5%BC%A0%E4%B8%89&age=12,这就是url为确保ASCII对特殊字符集非ASCII编码进行的编码。
如何解码呢?方法如下。

>>> from urllib.parse import quote,unquote,urlencode
>>> url = 'https://httpbin.org/get?name=%E5%BC%A0%E4%B8%89&age=12'
>>> unquote(url)
'https://httpbin.org/get?name=张三&age=12'

如果想要进行urlencode编码,则需要使用quote和urlencode,quote对字符串进行编码,一般只用于单个参数值,urlencode则对一组字典格式的参数进行编码组装。
示例如下:

>>> name = "张三"
>>> quote(name)
'%E5%BC%A0%E4%B8%89'
>>> url = f'https://httpbin.org/get?name={name}&age=12'
>>> url
'https://httpbin.org/get?name=张三&age=12'
>>>

>>> params = {"name": "张三", "age": 12}
>>> urlencode(params)
'name=%E5%BC%A0%E4%B8%89&age=12'
>>> url = f'https://httpbin.org/get?{urlencode(params)}'
>>> url
'https://httpbin.org/get?name=%E5%BC%A0%E4%B8%89&age=12'

base64编码

编码和加密的不同在于,编码一般为了传输或者压缩,支持解码。加密后则一般不能反解。
base64一般用于在接口中,将图片或媒体变为一种固定长度的字符串形式,方便传输。
base64编码解码方法如下。
编码

>>> import base64
>>> a = 'lts'
>>> b =a.encode('utf-8')
>>> base64.b64encode(b)
b'bHRz'
>>> base64.b64encode(b).decode('utf-8')
'bHRz'

解码

>>> base64.b64decode('bHRz').decode('utf-8')
'lts'
>>> base64.b64decode(b'bHRz').decode('utf-8')
'lts'
>>>

相关文章

  • Python中常用的文本转义及编码

    每种语言都有其关键字和保留字符,这样为了能这些特殊字符能正常显示,就需要转义,如Python中\n代表回车,HTM...

  • Python转义符

    编码过程中我们需要使用一些特殊字符,比如字符串中的引号、换行等;这时我们需要引入('')转义符。 常用转义符种类及...

  • python 包集合

    Python常用库 Chardet字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama主要用来...

  • 【收藏稳赚】Python常用的1000+库大盘点

    Python常用库 Chardet字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama主要用来...

  • Day03-字符串

    1.1 认识字符串 1.1什么是字符串 1.2 阻止转义 1.3 python中字符串中的字符是Unicode编码...

  • python学习笔记

    1.idle是一个pythonshell,输入界面 2.python中打印文本有‘’或者“”时,(1).用转义符号...

  • 网址URL中特殊字符转义编码

    网址URL中特殊字符转义编码字符 - URL编码值 URL特殊字符转义,URL中一些字符的特殊含义,基...

  • Python编码问题

    默认编码 字符串 python2 文本字符串默认编码是ASCII,中文默认UTF-8python3 文本字符串默认...

  • js 对html 的转义与反转义

    1. 项目中碰到html 编码为万国编码的情况下进行转义为html编码 转义为html 编码 // 万国码转义为h...

  • 文本文件的编码格式

    文本文件存储的内容是基于 字符编码 的文件,常见的编码有 ASCII 编码,UNICODE 编码等 Python ...

网友评论

      本文标题:Python中常用的文本转义及编码

      本文链接:https://www.haomeiwen.com/subject/lpesmktx.html