2012-11-14 73 views
1

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

在一个初步的步骤中,我必须在计算位置等文本上进行操作,所以我需要先将其转换并从所有HTML标签中清除它。这是通过BeautifulSoup完成:

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

通过对我的Django默认的测试服务器一切工作正常,但我我的生产服务器上运行有转换的特殊字符时,很奇怪的行为。

一个例子:

测试服务器

的MySQL查询给我:<p>bassverst&auml;rker</p>

被正确转换为:bassverstärker

生产服务器

我SQL查询给我:<p>bassverst&auml;rker</p>

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

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

我的配置:

测试服务器:

  • 的Django内置的解决方案(python manage.py runserver
  • BeautifulSoup 3.2.1
  • 的Python 2.6.5
  • Ubuntu的2.6。 32-43-generic

生产服务器:

  • 切诺基1.2.101
  • BeautifulSoup 3.2.1
  • 蟒蛇2.7.3
  • Ubuntu的3.2.0-32泛型

因为我不我不知道错误发生在哪个层面,我想问问有没有人可以帮助我。提前谢谢了。

回答

4

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

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

eveything在两台服务器上正常工作。尽管这有效,但知道为什么两个服务器在处理问题中的示例时行为不同。

但是,感谢所有。