Ik heb een browser die utf-8-tekens naar mijn Python-server stuurt, maar wanneer ik deze ophaal uit de queryreeks, is de codering die Python retourneert ASCII. Hoe kan ik de gewone string naar utf-8 converteren?
OPMERKING: de string die vanaf het web wordt doorgegeven, is al UTF-8-gecodeerd, ik wil alleen dat Python deze behandelt als UTF-8 en niet als ASCII.
Antwoord 1, autoriteit 100%
In Python 2
>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)
^ Dit is het verschil tussen een byte-tekenreeks (plain_string) en een unicode-tekenreeks.
>>> s = "Hello!"
>>> u = unicode(s, "utf-8")
^ Converteren naar unicode en specificeren van de codering.
In Python 3
Alle strings zijn unicode. De functie Unicode
bestaat niet meer. Zie antwoord van @Noumenon
Antwoord 2, autoriteit 26%
Als de bovenstaande methoden niet werken, kun je Python ook vertellen delen van een tekenreeks te negeren die niet naar utf-8 kunnen worden geconverteerd:
stringnamehere.decode('utf-8', 'ignore')
Antwoord 3, autoriteit 8%
Misschien een beetje overdreven, maar als ik met ascii en unicode in dezelfde bestanden werk, kan het herhalen van decodering lastig zijn, dit is wat ik gebruik:
def make_unicode(inp):
if type(inp) != unicode:
inp = inp.decode('utf-8')
return inp
Antwoord 4, autoriteit 6%
De volgende regel toevoegen aan de bovenkant van uw .py-bestand:
# -*- coding: utf-8 -*-
Met
kunt u rechtstreeks in uw script coderen, zoals dit:
utfstr = "ボールト"
Antwoord 5, Autoriteit 5%
Als ik je goed begrijp, heb je een UTF-8 gecodeerde byte-string in je code.
Het converteren van een byte-string naar een Unicode-string staat bekend als decodering (Unicode – & GT; byte-string is codering).
U doet dat met behulp van de Unicode functie of de decoderen methode. Ofwel:
unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")
of:
unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")
Antwoord 6, Autoriteit 4%
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')
Antwoord 7, Autoriteit 3%
In Python 3.6 hebben ze geen ingebouwde unicode () -methode.
Strings worden standaard als Unicode opgeslagen en er is geen conversie vereist. Voorbeeld:
my_str = "\u221a25"
print(my_str)
>>> √25
Antwoord 8, Autoriteit 2%
Vertaal met Ord () en Unichar ().
Elke Unicode Char heeft een getal Asociated, zoiets als een index. Dus Python heeft een paar methoden om te vertalen tussen een Char en zijn nummer. Downside is een voorbeeld van een ñ. Hoop dat het kan helpen.
>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ
Antwoord 9
- Ten eerste wordt
str
in Python weergegeven inUnicode
. - Ten tweede is
UTF-8
een coderingsstandaard omUnicode
-tekenreeks te coderen totbytes
. Er zijn veel coderingsstandaarden (bijv.UTF-16
,ASCII
,SHIFT-JIS
, enz.).
Wanneer de client gegevens naar uw server verzendt en deze UTF-8
gebruiken, verzenden ze een aantal bytes
en niet str
.
Je hebt een str
ontvangen omdat de “bibliotheek” of het “framework” dat je gebruikt, impliciet enkele willekeurige bytes
heeft geconverteerd naar str
.
Onder de motorkap bevinden zich slechts een aantal bytes
. Je hoeft alleen maar de “bibliotheek” te vragen om je de inhoud van het verzoek in bytes
te geven en je zult de decodering zelf afhandelen (als de bibliotheek je niet kan geven, probeert het zwarte magie te doen, dan zou je’ niet gebruiken).
- Decodeer
UTF-8
gecodeerdebytes
naarstr
:bs.decode('utf-8')
- Coder
str
naarUTF-8
bytes
:s.encode('utf-8')
Antwoord 10
u kunt dit ook doen:
from unidecode import unidecode
unidecode(yourStringtoDecode)
Antwoord 11
Ja, u kunt
. toevoegen
# -*- coding: utf-8 -*-
in de eerste regel van je broncode.
U kunt hier meer details lezen https://www.python.org/ dev / peps / pep-0263 /