显示原理

可以看到,源代码里面的字都是混乱的,复制出来也是乱的,但是显示的却是正常的。

再仔细看看,这一块是使用了一种神秘的字体

正常的字体就是 Unicode 编码和对应的字是一致的,而这种特殊的字体,则是 A 字的 Unicode 编码,实际上对应了 B 字的字形。

woff 字体获取

不同的网站可能会有不同的方式,有的可能可以通过请求获取到

有的可能是放在 css 中(通常使用 base64 加密)

针对这种情况,有很多方法可以解决,比如可以使用 Python 的 base64 库解码:

# 将数据进行解码
data_bytes = base64.b64decode(data)
# 将解码后的数据保存到文件
with open("font.woff", "wb") as file:
file.write(data_bytes)

woff 字体预览

可以通过一些在线网站直接预览(这里使用:在线字体查看器 | 字形查看器 - Tophix

woff 字体映射

比较省事的就用 Python 的 fontPreview 库:

self.glyfDict = fontPreview.FontPreview().preview("font.woff", "images")

但是会存在一些比较简单的字识别错误的情况,目前没有什么比较好的解决方法,就只能是人工修复了。

映射错误示例

比如这里的「」都是错的。

可以通过调试拿到哈希表,自己修修,反正映射错的字就那么几个()

推荐一个网站:Unicode 符号表 - 所有 Unicode 字符及其代码都在一页上 (◕‿◕) SYMBL

以上面的 woff 为例,U+4EEC 实际显示的是“「”,通过网站可以查到 4EEC 对应的字是 “们”

不过这样会有点慢,那么有没有更快的方法呢?有!

请看:Unicode与中文 编码/解码 - 锤子在线工具

网上的工具还是很多的,这个可以直接转换编码

修完之后手动存一个 json,使用的时候直接读取就好了

参考链接

python 爬虫遇到字体加密解决方案(woff2) ddddocr + 百度ocr 文字识别_python解决woff字体加密-CSDN博客

python爬虫之woff 超详细 woff字体反扒 起点woff爬虫 字体爬虫 起点中文网woff - 知乎