Réponses:
Vous avez raison, voir 3.1.3. Chaînes Unicode .
C'est la syntaxe depuis Python 2.0.
Python 3 les rendait redondants, car le type de chaîne par défaut est Unicode. Les versions 3.0 à 3.2 les ont supprimées, mais elles ont été rajoutées dans 3.3+ pour la compatibilité avec Python 2 pour faciliter la transition 2 à 3.
ur"string"
) est valide en Python 2, mais c'est malheureusement une syntaxe non valide en Python 3.
Le u dans u'Some String'
signifie que votre chaîne est une chaîne Unicode .
Q: Je suis terriblement pressé et j'ai atterri ici à partir de la recherche Google. J'essaie d'écrire ces données dans un fichier, j'obtiens une erreur et j'ai besoin de la solution la plus simple, probablement défectueuse, cette seconde.
R: Vous devriez vraiment lire le minimum absolu de Joel, chaque développeur de logiciels doit absolument, positivement, connaître l'essentiel sur l'Unicode et les jeux de caractères (sans excuses!) Sur les jeux de caractères.
Q: essayez pas de code temporel pls
Une amende. essayez str('Some String')
ou 'Some String'.encode('ascii', 'ignore')
. Mais vous devriez vraiment lire certaines des réponses et discussions sur la conversion d'une chaîne Unicode et cet excellent, excellent, amorce sur le codage de caractères.
Je suppose que cela indique "Unicode", est-ce correct?
Oui.
Si oui, depuis quand est-il disponible?
Python 2.x.
Dans Python 3.x, les chaînes utilisent Unicode par défaut et le u
préfixe n'est pas nécessaire . Remarque: dans Python 3.0-3.2, le u est une erreur de syntaxe. Dans Python 3.3+, c'est à nouveau légal pour faciliter l'écriture des 2/3 applications compatibles.
u
préfixe.
six.text_type()
partout pour le nombre (espérons-le minuscule) de personnes utilisant encore 3. [012] - au moins les informations sont là pour que vous puissiez choisir.
Je suis venu ici parce que j'avais un syndrome drôle de char sur ma requests
sortie. Je pensais que response.text
cela me donnerait une chaîne correctement décodée, mais dans la sortie, j'ai trouvé des doubles caractères amusants où les trémas allemands auraient dû être.
Il s'est avéré response.encoding
être vide en quelque sorte et donc response
je ne savais pas comment décoder correctement le contenu et je l'ai juste traité en ASCII (je suppose).
Ma solution était d'obtenir les octets bruts avec 'response.content' et de l'appliquer manuellement decode('utf_8')
. Le résultat a été schöne Umlaute.
Le correctement décodé
fourrure
contre le mal décodé
fĂźr
Toutes les chaînes destinées aux humains doivent utiliser u "".
J'ai trouvé que l'état d'esprit suivant aide beaucoup lorsqu'il s'agit de chaînes Python: Toutes les chaînes de manifeste Python doivent utiliser la u""
syntaxe. La ""
syntaxe concerne uniquement les tableaux d'octets.
Avant que le dénigrement ne commence, laissez-moi vous expliquer. La plupart des programmes Python commencent par utiliser ""
des chaînes de caractères. Mais ensuite, ils doivent prendre en charge la documentation sur Internet, alors ils commencent à utiliser "".decode
et tout d'un coup, ils obtiennent des exceptions partout sur le décodage de ceci et cela - tout cela à cause de l'utilisation de ""
for strings. Dans ce cas, Unicode agit comme un virus et fera des ravages.
Mais, si vous suivez ma règle, vous n'aurez pas cette infection (car vous serez déjà infecté).
bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
u""
.
C'est Unicode.
Mettez simplement la variable entre str()
, et cela fonctionnera bien.
Mais au cas où vous auriez deux listes comme celle-ci:
a = ['co32','co36']
b = [u'co32',u'co36']
Si vous cochez set(a)==set(b)
, cela sera faux, mais si vous procédez comme suit:
b = str(b)
set(a)==set(b)
Maintenant, le résultat sera vrai.
str()
ou u'€'.encode()
) sans passer un encodage. Si la chaîne contient des caractères non ASCII, l'utilisateur recevra une exception UnicodeEncodeException.
b = str(b)
donne juste la chaîne repr()
de la liste, ie b = "[u'co32', u'co36']"
. Puisset(a)==set(b) = False