Python如何正确获取重音字符?(美丽集团)

2024-04-26 00:12:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我用BeautifulSoup编写了一个s python代码来获得HTML,但没有得到如何正确地解决重音字符。在

HTML的字符集是

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

我有这个python代码:

^{pr2}$

我明白了:

Calções

我做错什么了?一些线索?在

谨致问候


Tags: 代码texthttphtmltypecontent字符meta
2条回答

正如bernie指出的,BS在内部使用Unicode。在

对于^{}

Beautiful Soup Gives You Unicode, Dammit

By the time your document is parsed, it has been transformed into Unicode. Beautiful Soup stores only Unicode strings in its data structures.

对于^{},当发生这种情况时,文档会更清楚地解释:

You can pass in a string or an open filehandle… First, the document is converted to Unicode, and HTML entities are converted to Unicode characters…`

换句话说,它会立即解码数据。所以,如果你得到了莫吉巴克,你必须在它进入BS之前修复它,而不是在它进入BS之后。在

BeautifulSoup构造函数的输入可以接受8位字节的字符串或文件,并尝试找出编码。有关详细信息,请参见Encodings。你可以通过打印出soup.original_encoding来检查它是否猜对了。如果它没有猜测ISO-8859-1或同义词,则唯一的选择是使其显式:decode在传入字符串之前,使用encoding以Unicode模式打开文件,等等

任何BS对象产生的结果,以及作为参数传递给任何方法的任何结果,都将始终是UTF-8(如果它们是字节字符串)。因此,调用decode('iso-8859-1')对从BS中得到的东西调用decode('iso-8859-1')可以保证在还没有损坏的情况下破坏它。在

反正你也不想这么做。正如你在评论中所说,“我正在输出到SQLite3数据库。”好吧,SQLite3总是使用UTF-8。(您可以在运行时用pragma来更改它,或者在编译时更改默认值,但这基本上破坏了Python接口,所以……不要这样做。)Py2str中只允许使用UTF-8(当然,在Py2unicode/Py3str中,没有编码)所以,如果您试图将BS数据编码为拉丁语-1以存储在数据库中,则会产生问题。只需按原样存储Unicode,或者根据需要将其编码为UTF-8(仅限Py2)。在

如果您不想了解所有这些,只需在首次调用BeautifulSoup之后到处使用Unicode,就不会出错。在

这里的问题是关于“从哪里”你“得到这个”。 如果这是您的终端接收到的输出,那么您的终端可能需要不同的编码!在

使用“打印”时可以尝试以下操作:

import sys
outenc = sys.stdout.encoding or sys.getfilesystemencoding()
print t.decode("iso-8859-1").encode(outenc)

相关问题 更多 >