我知道 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)
对 Unicode 进行编码,并对字节进行解码。 如果您使用错误的编解码器,Python 2 将使用ascii
编解码器隐式转换为正确的类型,这会产生您看到的错误。 请注意,Python 3 不会这样做,因此更容易发现错误。
如果input
是类型 unicode
,则只需使用 input.encode('utf8').decode('ascii','ignore')
删除 U+00FF>的所有 Unicode 代码点。
如果input
是类型 str
,则只需使用 input.decode('ascii','ignore')
。
P.S. 不要使用 Python 内置函数的名称作为变量名称。 input()
是内置的。