python 2.7中的字节函数仅接受一个参数

时间:2018-12-22 19:51:56

标签: python python-2.7 encoding

我知道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)

1 个答案:

答案 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()是内置的。