recherche

Maison  >  Questions et réponses  >  le corps du texte

字符串 - 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

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

PHPzPHPz2788 Il y a quelques jours500

répondre à tous(2)je répondrai

  • 大家讲道理

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

    Le JSON standard ne nécessite pas de spécification d'encodage.

    Vous utilisez la version chinoise simplifiée de Windows. La console système doit afficher les caractères en codage GBK, mais votre caractère « U+062F د LETTRE ARABE DAL » n'a aucune correspondance en codage GBK, il ne peut donc pas être généré.

    Vous pouvez choisir d'écrire dans un fichier ou d'installer la version arabe de Windows. Ou utilisez un autre système d'exploitation/terminal avec une meilleure prise en charge Unicode.

    répondre
    0
  • 高洛峰

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

    1. Vous devez d'abord comprendre pourquoi les demandes ont ce problème

    Les requêtes obtiendront le codage du jeu de caractères à partir du Content-Type de l'en-tête de réponse renvoyé par le serveur. Si le type de contenu a un champ charset, alors les requêtes peuvent identifier correctement le codage. Sinon, l'ISO par défaut. -8859-1 sera utilisé Détails Veuillez lire cette analyse de code de blog sur les problèmes de codage chinois dans la bibliothèque de requêtes Python

    Plusieurs méthodes sont mentionnées dans l'article, mais il semble que la version 3.x ait résolu ce problème.

    1. Ma suggestion
      Allez d'abord sur la page manuellement pour voir quel est l'encodage du jeu de caractères dans la partie d'en-tête de cette page, en supposant qu'il s'agit de 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)

    répondre
    0
  • Annulerrépondre