我知道python 3.7中的bytes()
最多需要3个参数,但是我使用的是python 2.7,我试图在清除文本后计算n-gram,问题是bytes
函数但是这给了我以下错误。
我曾尝试使用encode("utf-8")
对其进行编码,但未能解决问题,我也尝试仅将其保留为“内容”,但是一旦它碰到一个奇怪的字符(即拉丁语),它就会崩溃符号或数学符号)。
from urllib import urlopen
from bs4 import BeautifulSoup
import re,string
def cleanInput(input):
input=re.sub('\n+'," ",input)
input=re.sub("\[[0-9]*\]","",input)
input=re.sub(" +"," ",input)
input=bytes(input).encode("utf-8")
input=input.decode("ascii","ignore")
cleanInput=[]
input=input.split(" ")
for item in input:
item.strip(string.punctuation)
if len(item)>1 or item.lower()=='i' or item.lower()=="a":
cleanInput.append(item)
return cleanInput
我希望将命令bytes(content,"utf-8")
替换为同一行,这是我遇到的错误
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 90: ordinal not in range(128)
答案 0 :(得分:0)
您对Unicode进行编码,并解码字节。如果使用错误的代码,Python 2将使用ascii
编解码器隐式转换为正确的类型,这会产生您看到的错误。请注意,Python 3不会那样做,因此更容易发现错误。
如果input
的类型为unicode
,则只需使用input.encode('utf8').decode('ascii','ignore')
删除所有Unicode代码点> U + 00FF。
如果input
的类型为str
,则只需使用input.decode('ascii','ignore')
。
P.S。不要将Python内置函数的名称用作变量名。 input()
是内置的。