web-dev-qa-db-fra.com

Quel est le préfixe u dans une chaîne Python?

Comme dans:

u'Hello'

Je suppose que cela indique "Unicode", est-ce correct?

Si oui, depuis quand est-il disponible?

193
OscarRyz

Vous avez raison, voir .1.3. Chaînes Unicode.

C'est la syntaxe depuis Python 2.0.

Python 3 les a redondés, car le type de chaîne par défaut est Unicode. Les versions 3.0 à 3.2 les supprimaient, mais ils étaient ajoutés de nouveau dans 3.3 + pour assurer la compatibilité avec Python 2 afin de faciliter la transition de 2 à 3.

111
Stefan Kendall

Le u dans u'Some String' signifie que votre chaîne est une chaîne Unicode .

Q: Je suis extrêmement pressé et j'ai atterri ici à partir de Google Search. 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 imparfaite, de cette seconde.

R: Vous devriez vraiment lire Joel Minimum absolu, absolument tous les développeurs de logiciels, absolument ce qu'il faut savoir sur Unicode et les jeux de caractères (sans excuses!) essai sur les jeux de caractères.

Q: sry aucun pls de code temporel

Une amende. essayez str('Some String') ou 'Some String'.encode('ascii', 'ignore'). Mais vous devriez vraiment lire certaines des réponses et des discussions sur Conversion d'une chaîne Unicode et this excellent, excellent, introduction au codage de caractères.

113
Andrew

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 préfixe u n'est pas nécessaire. Remarque: dans Python 3.0-3.2, le u est une erreur de syntaxe. Dans Python 3.3+, il est à nouveau légal de faciliter l'écriture d'applications 2/3 compatibles.

50
kennytm

Je suis venu ici parce que mon syndrome requests était marqué par un syndrome de caractère drôle. Je pensais que response.text me donnerait une chaîne correctement décodée, mais dans la sortie, j'ai trouvé de drôles caractères doubles où les umlauts allemands auraient dû être.

Il s'avère que response.encoding était vide d'une manière ou d'une autre et donc response ne savait pas comment décoder correctement le contenu et le traitait simplement comme ASCII (je suppose).

Ma solution consistait à obtenir les octets bruts avec 'response.content' et à y appliquer manuellement decode('utf_8'). Le résultat était schöne Umlaute.

Le correctement décodé

fourrure

contre le mal décodé

pour

2
Chris

C'est Unicode.

Il suffit de mettre la variable entre str(), et tout se passera 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 deviendra faux, mais si vous procédez comme suit:

b = str(b)
set(a)==set(b)

Maintenant, le résultat sera vrai.

2
user3251882

Ce qui suit devrait aider:

http://docs.python.org/library/functions.html#unicode

http://www.amk.ca/python/howto/unicode (passez à "Assistance Unicode Python" si vous connaissez déjà les principes Unicode)

2
Brian Luft

Toutes les chaînes destinées aux humains doivent utiliser u "".

J'ai constaté que l'état d'esprit suivant était très utile lorsqu'il s'agissait de chaînes Python: tout Python chaînes de manifestes devraient utiliser la syntaxe u"". La syntaxe "" concerne uniquement les tableaux d'octets.

Avant de commencer, laissez-moi vous expliquer. La plupart des programmes Python commencent par utiliser "" pour les chaînes. Mais ensuite, ils ont besoin de supporter la documentation sur Internet, alors ils commencent à utiliser "".decode et tout à coup, ils obtiennent des exceptions partout pour décoder ceci et cela - tout cela à cause de l'utilisation de "" pour les chaînes. Dans ce cas, Unicode agit comme un virus et fera des ravages.

Mais, si vous suivez mes règles, vous n'aurez pas cette infection (car vous serez déjà infecté).

2
Frank Krueger