Rumah  >  Soal Jawab  >  teks badan

字符串 - Python编码问题?

我用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

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

PHPzPHPz2741 hari yang lalu478

membalas semua(2)saya akan balas

  • 大家讲道理

    大家讲道理2017-04-18 10:35:39

    JSON standard tidak memerlukan pengekodan yang dinyatakan.

    Anda menggunakan Windows versi Bahasa Cina Ringkas Konsol sistem perlu mengeluarkan aksara dalam pengekodan GBK, tetapi aksara anda "U+062F د ARABIC LETTER DAL" tidak mempunyai surat-menyurat dalam pengekodan GBK, jadi ia tidak boleh dikeluarkan.

    Anda boleh memilih untuk menulis pada fail atau memasang Windows versi Arab. Atau gunakan sistem pengendalian/terminal lain dengan sokongan Unicode yang lebih baik.

    balas
    0
  • 高洛峰

    高洛峰2017-04-18 10:35:39

    1. Mula-mula anda perlu memahami mengapa permintaan mempunyai masalah ini

    Permintaan akan memperoleh pengekodan set aksara daripada Jenis Kandungan pengepala respons yang dikembalikan oleh pelayan Jika jenis kandungan mempunyai medan charset, maka permintaan boleh mengenal pasti pengekodan dengan betul -8859-1 akan digunakan Butiran Sila baca analisis kod blog ini tentang isu pengekodan bahasa Cina dalam perpustakaan permintaan Python

    .

    Beberapa kaedah disebut dalam artikel, tetapi nampaknya 3.x telah menyelesaikan masalah ini.

    1. Cadangan saya
      Mula-mula pergi ke halaman secara manual untuk melihat apakah pengekodan charset di bahagian pengepala halaman ini, dengan mengandaikan ia 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)

    balas
    0
  • Batalbalas