J'ai donc cette page:
http: //hub.iis.sinica. EDU.TW/CYTOHUBBA/ P>
Apparemment, il s'agit de toutes sortes de foiles, car il est décodé correctement mais quand j'essaie de l'enregistrer à Postgres, je reçois: P>
DatabaseError: invalid byte sequence for encoding "UTF8": 0xedbdbf
5 Réponses :
Un objet Python La première question il y a Si si si Unicode code> est une séquence de points de code unicode et par définition appropriée Unicode. Une chaîne Python str code> est une séquence d'octets qui pourraient être des caractères Unicode codés avec un certain encodage (UTF-8, latin-1, Big5, ...). source code> est un objet unicode code> objet ou un str code> string.
Que source.encode ("utf-8") code> fonctionne juste signifie que vous pouvez em> convert source code> à une chaîne codée UTF-8, mais sont Vous le faites avant de le transmettre à la fonction de base de données? La base de données semble s'attendre à ce que les entrées soient codées avec UTF-8 et se plaint que l'équivalent de source.decode ("utf-8") code> échoue. P> Source code> est un objet unicode code>, il doit être codé sur UTF-8 avant de le transmettre à la base de données: p> source code> est un STR code> codé comme autre chose que UTF-8, vous devez décoder ce codage puis coder l'objet Unicode résultant à UTF-8: P> source = 'abc'
call_db(source.decode('Big5').encode('utf-8'))
Désolé, j'aurais dû clarifier. Source est un objet unicode qui est codé bien en python, les choses se brisent quand j'essaie de l'envoyer à Postgres ...
Qu'est-ce que tu fais exactement? Le contenu décodent effectivement bien comme Assurez-vous de comprendre la différence entre les chaînes UNICODE et les cordes codées UTF-8, cependant. Ce que vous devez envoyer à la base de données est Je voudrais en effet alors que Wolphe vérifie les paramètres de la base de données et de la connexion de base de données. P> P> utf-8 code>: unicodecontent.encode ("utf-8") code> (qui est identique à webcontent code>, mais vous avez décodé pour vérifier que vous êtes
J'utilise Django, qui code tout correctement, mais c'est Postgres qui décider que le codage (ou la chaîne codée) est mauvais, pour une raison quelconque ... tout ce que je fais dans Python Works, c'est pourquoi je ne peux pas la détecter. Peut-être que c'est un bug postgres?
En fin de compte, j'ai choisi de contourner cela, de saisir l'erreur et de la restauration de la transaction à l'aide de la gestion des transactions de Django. Je suis mystifié pourquoi cela se produirait, bien que ... p>
Il y a un bogue Voici ce qui se passe: p> Python 2.x ne reconnaît pas les paires de substitution UTF8 [1] comme étant invalide ( qui est ce que votre séquence de caractères est) p> ceci devrait être tout ce qui est nécessaire: p> mais merci à ce bug 'RE NE PAS ne pas réparer, il n'atteint pas les paires de substitution. p> Essayez-le dans Python 2.x, puis dans 3.x: P> b'\xed\xbd\xbf'.decode('utf8')
Aucun problème. J'essayais de faire plus ou moins ce que vous faisiez pour filtrer mes données lorsque vous effectuez une copie dans Postgers. Ce que j'ai fini par faire était de laisser tomber l'échec et filtrant des lignes individuelles en fonction des sorties d'erreur. Il était basé sur l'idée générale de la manière dont le code de copie dans PGloader fonctionne pgfoundry.org/projects/pgloaderleight
non liée: Si vous souhaitez réparer les paires de substituts: u '[\ ud83d \ ude42]'. Encode ('UTF-16', 'CARROCHALEPASS'). Décode ('utf-16') = u '[\ U0001f642] ' code>
Pour résoudre mes problèmes similaires avec Django / Postgres, je fais maintenant quelque chose comme ça
Êtes-vous sûr que votre connexion est définie pour utiliser UTF-8?
Oui, 300 000 autres pages Web ont été ajoutées, c'est juste celui qui échoue ...