Hoe converteer je een string naar utf-8 in Python

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 Unicodebestaat 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 strin Python weergegeven in Unicode.
  • Ten tweede is UTF-8een coderingsstandaard om Unicode-tekenreeks te coderen tot bytes. Er zijn veel coderingsstandaarden (bijv. UTF-16, ASCII, SHIFT-JIS, enz.).

Wanneer de client gegevens naar uw server verzendt en deze UTF-8gebruiken, verzenden ze een aantal bytesen niet str.

Je hebt een strontvangen omdat de “bibliotheek” of het “framework” dat je gebruikt, impliciet enkele willekeurige bytesheeft 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 byteste 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-8gecodeerde bytesnaar str: bs.decode('utf-8')
  • Coder strnaar UTF-8bytes: 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 /

Other episodes