中文单词,UnicodeEncode错误:"ascii"编解码器无法编码位置 55-56 中的字符:序号不在范围内(128)


#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()

它显示了一个错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 55-56: ordinal not in range(128)

错误消息的部分:

------ (( 中的 UnicodeEncodeError Traceback(最近一次调用( 92 打印(镜头(gobou_data((#test 93 返回gobou_data ---> 94 原始数据 = 运行数据圈(( 95 96 #開始按照月份把資料載下來,從今天所屬的這個月,一直自動存到資料的最開頭101.01.01

在 rundatacircle(( 中 87 网址 = 网址 88 打印(网址(#test ---> 89 urllib.request.urlretrieve(url, "data.gz"(#python 3 从 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,路径 = 拆分类型(URL( 186 --> 187 的 contextlib.closing(urlopen(url, data(( 作为 fp: 188 个标头 = fp.info(( 189

....它很长,所以我不列出整个消息。

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

附言这部分代码存在问题。我使用python 3.5

裁剪是一个中文单词,它不应该改变或删除。如果它已被删除,数据将出错。

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

首先,我更改了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

,然后从此列表中加载数据。

#     print(type(url))
#     print(dir(url))
    data = urllib.request.urlopen(url).read().decode('utf-8')#https://stackoverflow.com/questions/28906859/module-has-no-attribute-urlencode
#     print(type(data))
#     print(dir(data))
    result = json.loads(data)
#     result = json.loads(response.readall().decode('utf-8'))

注意函数是否具有编码或解码。您可以通过print(dir(XXX))进行检查

(你可以看到这个就明白了:python 3 子进程错误以字节为单位(

您的问题是用于编码URL的"ASCII"编码无法理解中文字符。

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

尝试使用它来编码您的 URL。

相关内容

最新更新