字符串 - Python编码问题?
PHPz
PHPz 2017-04-18 10:33:39
0
2
525

我用Python3的requests库从一个api请求一个json数据,然后试图去print出来:


    res = requests.get("http://aaa.com/bbb.php")
    res.encoding='utf-8'
    name = res.json(encoding = "utf8")["name"]
    print(name)

也试了一下方法:

name.encode('utf8').decode("utf8")
print(name)

我这个name字符串有可能有中文,数字,英文,也有可能有阿拉伯文。或者只有他们之中的一个。
我每次print的时候有时候能输出成功,有时候有以下错误:

  File "demo.py", line 53, in play_one
    print(json.loads(result_str)["name"])
UnicodeEncodeError: 'gbk' codec can't encode character '\u062f' in position 0: illegal multibyte sequence

我该怎么处理这个字符串,有可能同一个字符串混有不同的编码?还是我获取到的字符串每次都是不同编码的,我应该怎么正确输去这个不确定的字符串?

PHPz
PHPz

学习是最好的投资!

全部回覆(2)
大家讲道理

標準 JSON 是不需要指定編碼的。

你使用的是 Windows 簡體中文版,系統控制台需要輸出以 GBK 編碼來輸出字符,但是你的字符“U+062F د ARABIC LETTER DAL”在 GBK 編碼中沒有對應,因此無法輸出。

你可以選擇寫到文件,或是安裝阿拉伯文版的 Windows。或使用其它對 Unicode 支援更好的作業系統 / 終端。

小葫芦
  1. 首先你要弄清楚requests為什麼會出現這個問題

requests會從伺服器傳回的回應頭的Content-Type 去取得字元集編碼,如果content-type有charset欄位那麼requests才能正確辨識編碼,否則就使用預設的ISO-8859-1. 詳情請看這篇部落格程式碼分析Python requests庫中文編碼問題

文中提到了幾個辦法,不過似乎3.x已經修復了這個問題。

  1. 我的建議
    先手動去頁面看這個頁面header部分的charset到底是什麼編碼,假設是GBK

resp = requests.get(item_info_url)
resp.encoding = 'GBK'
html = resp.text
name = json.loads(html)['name']

# or
# 我不太用res.json这个方法==

res = requests.get("http://aaa.com/bbb.php")
res.encoding='GBK'
name = res.json()["name"]
print(name)
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板