我正在用Python编写维基百科的网页爬虫。我提取页面的语言信息,其中包含中文、日语等语言的多个字符,当我得到我想要的字符串时,将它们打印出来,它们用ascii编码。结果是:
.(‘越南语’,'vi',‘Ti\XE1\xbfng Vi\xe1\xbb\x87t') {’置信度‘:1.0,’编码‘:'ascii'} (’土耳其语‘,'tr',’T\xc3\xbcrk\xc3 3\xa7e‘){’置信度‘:1.0,’编码‘:'ascii'} (’乌克兰人‘,’英国‘,'\xd0\xa3\xd0\xba\xd1\x80\xd0\xb0\xd1\x97\xd0\xbd\xd1\x81\xd1\x8c\xd0\xba\xd0\xb0') {‘置信度’:1.0,‘编码’:'ascii'} (‘中文’,'zh',‘\XE4\xb8\xad\xe6 6\X96\X87’){‘置信度’:1.0,‘编码’:'ascii'}
我的代码:
def getLanguageContent(content):
mainPattern = re.compile(matchReg)
mainContentMatch = mainPattern.findall(content)
return mainContentMatch
arr = getLanguageContent(getContentFromURL(sitePrefix))
print arr
for a in arr:
a = str(a)
print aarr是一个列表,如“简单英语”、“阿拉伯语”、“ar”、“'\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9'),”.
我想知道如何处理这个问题,并经常在正确的decoding.Thanks中打印字符串。
发布于 2014-12-13 05:44:44
首先,'Ti\xe1\xba\xbfng Vi\xe1\xbb\x87t'不是在ASCII中编码的。很明显是八号。因此,您不能在ASCII中编码'Tiếng Việt',至少在不丢弃信息(例如,'Tieng Viet')的情况下是不可能的。当我在示例中的所有字符串上运行chardet.detect时,我得到了UTF-8,其信任范围从0.7525到0.99不等。
您的问题是,arr是字符串元组的列表,而不是字符串的列表。当您在元组上调用str(a)时,所做的就是对每个元素调用repr,然后用引号、括号和逗号等来包装整个事件。字符串的repr总是在ASCII中,对非ASCII和ASCII-但不可打印的字符使用反斜杠转义.例如,str(('Vietnamese', 'vi', 'Tiếng Việt'))是"('Vietnamese', 'vi', 'Ti\\xe1\\xba\\xbfng Vi\\xe1\\xbb\\x87t')"。那不是有用的字符串。
不要试图找出如何使无用的字符串有用,只需使用您已经拥有的有用字符串即可。不要对字符串元组列表或每个字符串元组调用str。只需在每个元组中使用字符串即可。例如:
for language, code, name in arr:
print name这将(假设您的控制台可以处理UTF-8)打印出Tiếng Việt。或者,如果您想将其解码为unicode,只需要uname = name.decode('utf-8')。或者,如果您想调用chardet.detect(name),它将验证它是具有0.7525信心的UTF-8。诸若此类。
发布于 2014-12-13 05:43:13
这听起来很奇怪。Ascii不包含中文或日文characters.They,可能是用utf8编码的。您想要的是str(a).decode("utf-8")解码在utf-8中编码的字符串。如果您尝试使用str(a).decode("ascii"),它应该会给您一个错误。但是如果您想打印出来,您的终端应该支持utf-8编码,所以只需打印str(a)即可。
而且,您没有编写完整的程序,所以我假设str(a)是一个句子字符串。
https://stackoverflow.com/questions/27455882
复制相似问题