2012-11-14 64 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在兩臺服務器上正常工作。儘管這有效,但知道爲什麼兩個服務器在處理問題中的示例時行爲不同。

但是,感謝所有。