中文字,UnicodeEncodeError:“ascii”编解码器无法对5556位的字符进行编码:序号不在范围内(128)

2024-06-02 04:29:49 发布

您现在位置:Python中文网/ 问答频道 /正文

#python 3 version

   ...

#關於產地
...
crop = '牛蒡'
...

#要求輸入資料
def rundatainputcircle():
    marketinput = input('*請擇一輸入: 1:台北一, 2:台北二, 3:三重市, 4:台中市, 5:高雄市, 6:鳳山市, 7:桃園縣 或是不填寫 > ')
    if marketinput == '':
        market = ''
    elif len(str(marketinput)) ==1 and 1 <= int(marketinput) <= 7:
        market = uriba[uribalist[int(marketinput)-1] + 1]
    else:
        print('請重新輸入:1:台北一, 2:台北二, 3:三重市, 4:台中市, 5:高雄市, 6:鳳山市, 7:桃園縣 或是不填寫 > ')
        rundatainputcircle()
rundatainputcircle()

#匯入資料
def rundatacircle():
    url = 'http://m.coa.gov.tw/OpenData/FarmTransData.aspx?' + '$top=' + top + '&$skip=0&crop=' + crop + '&StartDate=' + startdate + '&EndDate=' + enddate
    if market != '':
        url += '&Market=' + market
    else:
        url = url
    url = url.encode('ascii')
    print(url)#test
    urllib.request.urlretrieve(url, "data.gz")
    data_str = open('data.gz', 'r').read()#gzip.open('data.gz', 'r').read()
    gobou_data = json.loads(data_str)
    print(len(gobou_data))#test
    return gobou_data
rawdata = rundatacircle()

它显示了一个错误:

^{pr2}$

错误信息部分:

------ UnicodeEncodeError Traceback (most recent call last) in () 92 print(len(gobou_data))#test 93 return gobou_data ---> 94 rawdata = rundatacircle() 95 96 #開始按照月份把資料載下來,從今天所屬的這個月,一直自動存到資料的最開頭101.01.01

in rundatacircle() 87 url = url 88 print(url)#test ---> 89 urllib.request.urlretrieve(url, "data.gz")#python 3 getting pics from url 90 data_str = open('data.gz', 'r').read()#gzip.open('data.gz', 'r').read() 91 gobou_data = json.loads(data_str)

/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py in urlretrieve(url, filename, reporthook, data) 185 url_type, path = splittype(url) 186 --> 187 with contextlib.closing(urlopen(url, data)) as fp: 188 headers = fp.info() 189

……它很长,所以我没有列出全部信息。在

我在Google和stackflow上尝试过很多方法,但都解决不了这个问题。我无法理解错误的含义。在

这部分代码有问题。我用的是python3.5

作物是一个中文单词,不应该更改或删除。 如果它被删除了,数据就会出错。。。。在


Tags: testcropurlreaddataopenmarketprint
2条回答

你的问题是你用来编码你的URL的ascii编码不理解中文字符。在

经过短时间的网络搜索,我找到了支持汉字的gb18030编码。 https://en.wikipedia.org/wiki/GB_18030

试着用这个来编码你的网址。在

最后,我找到了一个解决这个问题的方法,它分为两个部分。在

首先,我改变了url中中文单词的编码:

url = 'http://m.coa.gov.tw/OpenData/FarmTransData.aspx?$top=' + top + 

'&$skip=0&' + urllib.parse.urlencode({'crop': crop}) + '&StartDate=' + startdate + '&EndDate=' + enddate
    if market != '':
        url += '&' + urllib.parse.urlencode({'Market': market})
    else:
        url = url

然后从这个列表中加载数据。在

^{pr2}$

注意函数是否有编码或解码。 您可以通过print(dir(XXX))来检查这个问题

(您可以通过这个来理解:python 3 subprocess error in bytes

相关问题 更多 >