Python 美丽的巴黎不是';t即使在使用“UTF-8”后也无法识别UTF-8字符;fromEncoding=UTF-8“;

Python 美丽的巴黎不是';t即使在使用“UTF-8”后也无法识别UTF-8字符;fromEncoding=UTF-8“;,python,utf-8,beautifulsoup,nltk,Python,Utf 8,Beautifulsoup,Nltk,我编写了一个简单的脚本,只需获取一个网页,并将其内容提取到一个标记化列表中。但是,我遇到了一个问题,当我将BeautifulSoup对象转换为字符串时,“,”等的UTF-8字符不会转换,而是保持unicode格式 当我创建BeautifulSoup对象时,我将源代码定义为UTF-8,我甚至尝试单独运行unicode转换,但没有任何效果。你知道为什么会发生这种情况吗 from urllib2 import urlopen from bs4 import BeautifulSoup import n

我编写了一个简单的脚本,只需获取一个网页,并将其内容提取到一个标记化列表中。但是,我遇到了一个问题,当我将BeautifulSoup对象转换为字符串时,“,”等的UTF-8字符不会转换,而是保持unicode格式

当我创建BeautifulSoup对象时,我将源代码定义为UTF-8,我甚至尝试单独运行unicode转换,但没有任何效果。你知道为什么会发生这种情况吗

from urllib2 import urlopen
from bs4 import BeautifulSoup
import nltk, re, pprint

url = "http://www.bloomberg.com/news/print/2013-07-05/softbank-s-21-6-billion-bid-for-    sprint-approved-by-u-s-.html"
raw = urlopen(url).read()
soup = BeautifulSoup(raw, fromEncoding="UTF-8")
result = soup.find_all(id="story_content")
str_result = str(result)
notag = re.sub("<.*?>", " ", str_result)
output = nltk.word_tokenize(notag)
print(output)
从urllib2导入urlopen
从bs4导入BeautifulSoup
导入nltk、re、pprint
url=”http://www.bloomberg.com/news/print/2013-07-05/softbank-s-21-6-billion-bid-for-    sprint-approved-by-u-s-.html“
raw=urlopen(url).read()
汤=美汤(生的,fromEncoding=“UTF-8”)
结果=汤。查找所有(id=“故事内容”)
str_result=str(结果)
notag=re.sub(“,”,str_结果)
输出=nltk.word\u标记化(notag)
打印(输出)

您遇到问题的字符不是
(U+0022)和
(U+0027),而是卷引号
(U+201C)和
(U+201D)和
(U+2019)。首先将其转换为直接版本,您应该会得到预期的结果:

raw = urlopen(url).read()
original = raw.decode('utf-8')
replacement = original.replace('\u201c', '"').replace('\u201d', '"').replace('\u2019', "'")
soup = BeautifulSoup(replacement)  # Don't need fromEncoding if we're passing in Unicode

这将使引号字符变成您所期望的形式。

哇,它实际上就是这样拼写的。”fromEncoding完全不会与formEncoding混淆。您能复制并粘贴您认为无法转换的字符吗?字符[“]和[”]与[“]和[”]不同。您希望它们以某种方式自动转换吗?感谢您的帮助,我没有意识到它们是两个不同的字符。我尝试运行带有您的调整的脚本,但它们仍然没有被替换。我甚至尝试使用replacement=original.replace(r“\u201c”,“”).replace(r“\u201d”,“”).replace(r“\u201d”,“).replace(r”\u2019“,””),但这不起作用。以下是“替换”输出中仍然显示的内容:Clearwire\u2019s首席执行官和总裁感谢rmunn的帮助。使其工作正常,只需将替换代码修改为以下内容:替换=原始。替换(u'\u201c',“)。替换(u'\u201d',“)。替换(u'\u2019',“))哎呀,是的,我忘了在Python2.x中,字符串文本在默认情况下不是Unicode的,您需要执行
u“foo“
获取Unicode字符串。正如您已经发现的,您需要在这些字符串文本前面添加
u
。我猜这表明了在堆栈溢出注释框而不是Python解释器中编写代码的危险性…:-)