之前写过一篇文章关于《开发爬虫过程中遇到的乱码问题》主要讨论在爬取数据以后使用了错误的编码进行解码加工,导致数据结果出现乱码的问题。这次遇到的问题是在学习Chromium过程中遇到的。本来想学习一下如何防御使用Chromium加上Selenium的爬取。在学习过程中,突然发现获取的数据存在编码问题。字符格式如下:
方案概述联网LED照明方案可执行全部的DALI 和 DMX512A协议。该方案包括LED驱动板
可以看到中文字符都是乱码,但又不是乱码。英文字符可以正常显示。最初以为是用错了编码,后来查看源代码发现,页面使用了常规的UTF-8编码。最后在网络搜索了一下,发现这是一种在html中的uniode转义。
什么是 Unicode 转义
Unicode转义又叫做unicode escape,是一种在文本格式中表示Unicode字符的方法,这些格式通常仅支持有限的字符集,例如ASCII。它们本质上是使用各种符号将字符转换为其数字代码点。Unicode转义通常有以下几种格式:
- \uXXXX: 这是最常用的格式。它以
\u
开头,后面跟着精确的四位十六进制数字 (XXXX) 表示 Unicode 代码点。例如,\u0041
代表字母 “A”。 - &#DDDD;: 这使用十进制数字,前面加上”&#”,中间使用十进制数字,后面加上”;”(分号)。这种情况通常出现在HTML页面中,称为”HTML character references”。
第一种方式遇到的比较多,也比较常见。使用以下Python代码可以实现这种Unicode转义:
Python 3.11.0 (main, Oct 24 2022, 18:26:48) [MSC v.1933 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> name = "你好"
>>> name.encode("unicode-escape")
b'\\u4f60\\u597d'
>>> name = b'\\u4f60\\u597d'
>>> name.decode("unicode-escape")
'你好'
第二种是本文遇到的情况,一般出现在前端页面上使用JS对Unicode字符转中文的情况。以下是使用Python代码转中文的样例:
>>> name = "方"
>>> nameCode = name[2:-1]
>>> codepoint = int(nameCode)
>>> chr(codepoint)
'方'
扫码联系船长