1

我在从 HTML 转换特殊字符时遇到了一个奇怪的问题。我有一个 Django 项目,其中文本以 HTML 编码存储在 MySQL 数据库中。这是必要的,因为我不想丢失任何文本格式。

在初步步骤中,我必须对文本进行操作,例如计算位置,因此我需要先将其转换并从所有 HTML-Tags 中清除它。这是由 BeautifulSoup 完成的:

convertedText = str(BeautifulSoup(text.text, convertEntities=BeautifulSoup.HTML_ENTITIES))
convertedText = ''.join(BeautifulSoup(convertedText).findAll(text=True))

通过在我的 Django-default 测试服务器上工作一切正常,但是当我在生产服务器上运行它时,在转换特殊字符时会出现奇怪的行为。

一个例子:

测试服务器

MySQL-Query 给了我:<p>bassverst&auml;rker</p>

正确转换为:bassverstärker

生产服务器

MySQL-Query 给了我:<p>bassverst&auml;rker</p>

这被错误地转换为:bassverst\ucc44rker

不知何故,&auml;转换为\ucc44,这导致错误的字符。

我的配置:

测试服务器:

  • Django 内置解决方案 ( python manage.py runserver)
  • 美丽汤 3.2.1
  • Python 2.6.5
  • Ubuntu 2.6.32-43-通用

生产服务器:

  • 切诺基 1.2.101
  • 美丽汤 3.2.1
  • 蟒蛇2.7.3
  • Ubuntu 3.2.0-32-通用

因为我不知道错误发生在哪个级别,所以我想问一下是否有人可以帮助我解决这个问题。提前谢谢了。

4

1 回答 1

4

我找到了解决这个问题的方法。我不知道 BeautifulSoup 有内置方法getText()。通过以下方式转换 HTML 时:

convertedText = BeautifulSoup(text.text, convertEntities=BeautifulSoup.HTML_ENTITIES).getText()

一切在两台服务器上都可以正常工作。尽管这可行,但在处理问题中的示例时,了解为什么两台服务器的行为不同会很有趣。

不过,谢谢大家。

于 2012-11-14T10:19:29.967 回答