首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BeautifulSoup美化编码非英语(西里尔语)字符奇怪

BeautifulSoup美化编码非英语(西里尔语)字符奇怪
EN

Stack Overflow用户
提问于 2021-10-30 22:31:22
回答 1查看 228关注 0票数 0

我有带有西里尔字母的HTML。我正在使用BeautifulSoup4来处理这个问题。它很好,但当我去美化,它把所有的西里尔字符转换成其他东西。下面是一个使用Python3的虚拟示例:

代码语言:javascript
复制
from bs4 import BeautifulSoup

hello = '<span>Привет, мир</span>'
soup = BeautifulSoup(hello, 'html.parser')
print("Before prettify:\n{}".format(soup))
soup = soup.prettify(formatter='html')
print("\nafter prettify:\n{}".format(soup))

这是它生成的输出:

代码语言:javascript
复制
Before prettify:
<span>Привет, мир</span>

after prettify:
<span>
 &Pcy;&rcy;&icy;&vcy;&iecy;&tcy;, &mcy;&icy;&rcy;
</span>

它正确地格式化了HTML (将标记放在它们的行上),但它正在将西里尔字符转换成其他字符(老实说,我甚至不确定编码是什么)。

我尝试过各种方法来防止这种情况;prettify(encoding=None, formatter='html')prettify(encoding='utf-8', formatter='html'),我也尝试过改变我创建汤对象的方式:soup = BeautifulSoup(hello.encode('utf-8'), 'html.parser')soup = BeautifulSoup(hello, 'html.parser', from_encoding='utf-8') --在美化过程中,似乎没有什么能改变西里尔字符的变化。

我想这一定是我在某个地方使用编码参数时犯的一个非常简单的错误,但是在搜索了internet和BS4文档之后,我无法理解这一点。是否有一种方法可以使用BeautifulSoup的美化,但保持原来的西里尔字母,或者这是不可能的?

编辑:我现在意识到(感谢DYZ的回答),从漂亮调用中删除formatter='html'将阻止BeautifulSoup转换西里尔字符。不幸的是,这也删除了文档中的任何&nbsp字符。在查看了BS4输出格式文档之后,解决方案似乎是使用BS的格式化程序类创建一个自定义格式化程序,并在对漂亮- soup.prettify(formatter=my_formatter)的调用中指定这一点。不过,我还不确定这会带来什么后果。我已经发布了这个堆叠溢出问题来尝试解决这个单独的问题。(将格式美化为保存字符和Cryillic字符编辑:参见对这个问题的回答-我终于弄明白了。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-30 23:17:38

来自文档

如果您传入formatter=" HTML ",Beautiful将尽可能地将Unicode字符转换为HTML。

如果不需要这样做,请不要使用HTML格式化程序:

代码语言:javascript
复制
soup.prettify()
#'<span>\n Привет, мир\n</span>'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69782625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档