Comment convertir une chaîne Unicode (contenant des caractères supplémentaires comme £ $, etc.) en une chaîne Python?
python
string
unicode
type-conversion
williamtroup
la source
la source
print type(unicode_string), repr(unicode_string)
Python 3.x: Modifiezprint type(unicode_string), ascii(unicode_string)
ensuite votre question et copiez / collez les résultats de l'instruction d'impression ci-dessus. NE retapez PAS les résultats. Recherchez également en haut de votre code HTML et voyez si vous pouvez trouver quelque chose comme ceci: <meta http-equiv = "Content-Type" content = "text / html; charset = iso-8859unicode_string = u"I'm unicode string"; bytestring = unicode_string.encode('utf-8'); unicode_again = bytestring.decode('utf-8')
Réponses:
Voir
unicodedata.normalize
la source
unicode
chaîne en astr
est de supprimer ou de convertir les caractères qui ne peuvent pas être représentés en ASCII. Donc +1 de moi.type(title) == unicode and type(title.encode('utf-8')) == str
. Pas besoin de corrompre l'entrée, pour obtenir un bytestring qui peut être enregistré dans un fichier.Vous pouvez utiliser l'encodage en ASCII si vous n'avez pas besoin de traduire les caractères non ASCII:
la source
ignore
vsreplace
a.encode('ascii', 'xmlcharrefreplace')
donne'aaaàçççñññ'
.type(a)
eststr
en Python 3.6.8 et n'a aucuneencode()
méthode.Si la chaîne ne contient que des caractères ascii.
la source
Si vous avez une chaîne Unicode et que vous souhaitez l'écrire dans un fichier ou tout autre formulaire sérialisé, vous devez d'abord la coder dans une représentation particulière qui peut être stockée. Il existe plusieurs codages Unicode courants, tels que UTF-16 (utilise deux octets pour la plupart des caractères Unicode) ou UTF-8 (1-4 octets / point de code selon le caractère), etc. Pour convertir cette chaîne en un codage particulier, vous peut utiliser:
Cette chaîne brute d'octets peut être écrite dans un fichier. Cependant, notez que lorsque vous le relisez, vous devez savoir dans quel encodage il se trouve et le décoder en utilisant ce même encodage.
Lors de l'écriture dans des fichiers, vous pouvez vous débarrasser de ce processus de codage / décodage manuel en utilisant le module codecs . Ainsi, pour ouvrir un fichier qui code toutes les chaînes Unicode en UTF-8 , utilisez:
Notez que tout autre élément utilisant ces fichiers doit comprendre l'encodage du fichier s'il souhaite les lire. Si vous êtes le seul à lire / écrire, ce n'est pas un problème, sinon assurez-vous que vous écrivez sous une forme compréhensible par tout ce qui utilise les fichiers.
Dans Python 3, cette forme d'accès aux fichiers est la valeur par défaut, et la
open
fonction intégrée prendra un paramètre d'encodage et se traduira toujours vers / depuis les chaînes Unicode (l'objet chaîne par défaut en Python 3) pour les fichiers ouverts en mode texte.la source
Voici un exemple:
la source
utf8
comme indiqué ici, le résultat n'est que des points d'interrogation? Voici une image de mon Python, version 2.7.13. (Je peux encoder d'autres objets Unicode commeu"Klüft"
, mais pas les Euros?)Eh bien, si vous êtes prêt / prêt à passer à Python 3 (ce qui n'est peut-être pas dû à l'incompatibilité en arrière avec du code Python 2), vous n'avez pas à effectuer de conversion; tout le texte en Python 3 est représenté avec des chaînes Unicode, ce qui signifie également qu'il n'y a plus d'utilisation de la
u'<text>'
syntaxe. Vous avez également des chaînes d'octets qui sont utilisées pour représenter des données (qui peuvent être une chaîne codée).http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
(Bien sûr, si vous utilisez actuellement Python 3, le problème est probablement lié à la façon dont vous essayez d'enregistrer le texte dans un fichier.)
la source
Voici un exemple de code
la source
le fichier contient une chaîne au format unicode
pour moi
la source
result.encode().decode('unicode-escape')
Aucune réponse n'a fonctionné pour mon cas, où j'avais une variable de chaîne contenant des caractères unicode, et aucun encodage-décodage expliqué ici n'a fait le travail.
Si je le fais dans un terminal
ou
La sortie est correcte:
Mais travailler avec des scripts chargeant cette variable de chaîne n'a pas fonctionné.
C'est ce qui a fonctionné sur mon cas , au cas où cela aiderait quelqu'un:
la source