Cela marche

s = 'jiā'
s.find(u'\u0101')

Comment puis-je faire quelque chose comme ça:

s = 'jiā'
zzz = '\u0101'
s.find(zzz)

Puisque j'utilise une variable maintenant, comment puis-je indiquer que la chaîne représentée par la variable est Unicode?

8
Steve 11 nov. 2011 à 20:39

3 réponses

Meilleure réponse

Puisque j'utilise une variable maintenant, comment puis-je indiquer que la chaîne représentée par la variable est Unicode?

En le définissant comme une chaîne Unicode en premier lieu.

zzz = u"foo"

Ou, si vous avez déjà une chaîne dans un autre codage, en la convertissant en Unicode (le codage d'origine doit être spécifié si la chaîne n'est pas ASCII).

zzz = unicode(zzz, encoding="latin1")

Ou en utilisant Python 3 où toutes les chaînes sont Unicode.

8
kindall 3 nov. 2017 à 16:07

zzz tel que défini dans votre message est un objet str simple, pas un objet unicode, il n'y a donc aucun moyen d'indiquer qu'il s'agit de quelque chose qu'il n'est pas réellement. Vous pouvez cependant convertir l'objet str en objet unicode en spécifiant un encodage:

s.find(zzz.decode("utf-8"))

Remplacez utf-8 par le codage de la chaîne codé.

Notez que dans votre exemple

zzz = '\u0101'

zzz est une chaîne simple de longueur 6. Il n'y a pas de moyen facile de corriger ce mauvais littéral de chaîne par la suite, sauf pour les hacks le long des lignes de

ast.literal_eval("u'" + zzz + "'")
3
Sven Marnach 11 nov. 2011 à 16:50

Dans certains cas (j'ignore quand), vous devrez également décoder la chaîne que vous recherchez:

s.decode("utf-8").find(u"\u0101")
0
Cesc 18 mars 2014 à 08:11