fix render encoding

This commit is contained in:
felinae98
2021-07-08 17:47:01 +08:00
parent 272ce58b09
commit 2d44bc5dd1
2 changed files with 11 additions and 2 deletions
+3 -1
View File
@@ -1,4 +1,5 @@
import asyncio import asyncio
import base64
from html import escape from html import escape
from typing import Awaitable, Callable, Optional from typing import Awaitable, Callable, Optional
from urllib.parse import quote from urllib.parse import quote
@@ -91,7 +92,8 @@ class Render(metaclass=Singleton):
lines = text.split('\n') lines = text.split('\n')
parsed_lines = list(map(lambda x: '<p>{}</p>'.format(escape(x)), lines)) parsed_lines = list(map(lambda x: '<p>{}</p>'.format(escape(x)), lines))
html_text = '<div style="width:17em;padding:1em">{}</div>'.format(''.join(parsed_lines)) html_text = '<div style="width:17em;padding:1em">{}</div>'.format(''.join(parsed_lines))
url = 'data:text/html,{}'.format(quote(html_text)) url = 'data:text/html;charset=UTF-8;base64,{}'.format(base64.b64encode(html_text.encode()).decode())
logger.info(url)
data = await self.render(url, target='div') data = await self.render(url, target='div')
return data return data
+8 -1
View File
@@ -10,5 +10,12 @@ if typing.TYPE_CHECKING:
@pytest.mark.render @pytest.mark.render
async def test_render(plugin_module: 'nonebot_hk_reporter'): async def test_render(plugin_module: 'nonebot_hk_reporter'):
render = plugin_module.utils.Render() render = plugin_module.utils.Render()
res = await render.text_to_pic('a\nbbbbbbbbbbbbbbbbbbbbbb\ncd') res = await render.text_to_pic('''a\nbbbbbbbbbbbbbbbbbbbbbb\ncd
<h1>中文</h1>
VuePress 由两部分组成:第一部分是一个极简静态网站生成器
(opens new window),它包含由 Vue 驱动的主题系统和插件 API,另一个部分是为书写技术文档而优化的默认主题,它的诞生初衷是为了支持 Vue 及其子项目的文档需求。
每一个由 VuePress 生成的页面都带有预渲染好的 HTML,也因此具有非常好的加载性能和搜索引擎优化(SEO)。同时,一旦页面被加载,Vue 将接管这些静态内容,并将其转换成一个完整的单页应用(SPA),其他的页面则会只在用户浏览到的时候才按需加载。
''')
print(res) print(res)