recherche

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

字符编码 - python使用split(‘中文字符’)出错

根据网页所给的字符编码将其字节数据decode('gb2312')
用的是scrapy,从给出的url获取body

def parse(self, response):
    body = response.body.decode('gb2312')
    print(body)    
    学分:1.5 # body就是这样之类的,中间的冒号是中文的冒号
    # 想弄成的效果就是['学分','1.5']
    body = body.split(':') # 就这样使用中文的冒号符来分割,但是出错
SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xa3 in position 0: invalid start byte

请问怎么解决?

PHP中文网PHP中文网2817 Il y a quelques jours1121

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

  • 大家讲道理

    大家讲道理2017-04-18 09:06:39

    # J'ai essayé de faire ça
    imprimer(corps.encode('gb2312'))
    print(corps.encode('utf-8'))
    Le résultat est le suivant :
    b'\xb3\xd0\xb5\xa3\xb5\xa5\xce\xbb\xa3\xba\xd5\xfe\xb7\xa8\xd1\xa7\xd4\xba'
    b'\xe6\x89\xbf\xe6\x8b\x85\xe5\x8d\x95\xe4\xbd\x8d\xef\xbc\x9a\xe6\x94\xbf\xe6\xb3\x95\xe5\xad\xa6 \xe9\x99\xa2'
    #Que les deux résultats soient respectivement gb2312 et utf8.
    >>> gb2312.decode('utf-8')
    Traceback (dernier appel le plus récent) :
      Fichier "<stdin>", ligne 1, dans <module>
    UnicodeDecodeError : le codec 'utf-8' ne peut pas décoder l'octet 0xb3 en position 0 : octet de démarrage non valide
    

    En regardant à nouveau l'erreur ci-dessus, il s'agit de octet 0xa3
    Je l'ai donc essayé plusieurs fois sur le terminal et j'ai découvert que les deux points étaient encodés en gb2312

    >>> b'\xa3\xba'.decode('gb2312') ':'

    Il devrait donc être que python utilise l'utf-8 par défaut pour décoder le corps de gb2312, donc une façon à laquelle je peux penser est de modifier la valeur d'encodage par défaut, qui est l'instruction sur la première ligne : # -*- codage : gb2312 -*-
    Alors l'opération a réussi. Existe-t-il une autre méthode ?

    répondre
    0
  • 迷茫

    迷茫2017-04-18 09:06:39

    Python3

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:06:39

    Après le décodage, le corps doit être encodé en Unicode, utilisez la méthode suivante :

    body = body.split(u':')

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 09:06:39

    Un autre problème d'encodage, vous pouvez vous référer à : Encodage de caractères pour l'interaction homme-machine et Vaincre l'encodage de caractères Python en cinq minutes.

    #! /usr/bin/env python # -*- codage : utf-8 -*- # Imitez les données que vous obtenez de la page Web data = "Crédit : 1,5".decode("utf-8").encode('gb2312') # data = u"Crédit : 1,5".encode('gb2312') type d'impression (données) corps = data.decode('gb2312') type d'impression (corps) #type unicode # Deux solutions print body.split(u':') #unicode correspond à unicode print body.encode("utf-8").split(":") # utf-8 correspond à utf-8

    répondre
    0
  • Annulerrépondre