Hur man arbetar med Unicode i Python

By rik

Python är ett flexibelt programmeringsspråk med utmärkt stöd för Unicode. Unicode är en central standard som gör det möjligt att representera tecken från olika språk och skriftsystem. För att utveckla program som hanterar textdata på ett effektivt och korrekt sätt är en god förståelse för hur man arbetar med Unicode i Python avgörande.

Unicode: En introduktion

I den digitala världen representeras text med hjälp av sekvenser av numeriska värden. Den traditionella ASCII-standarden kunde endast hantera ett begränsat antal tecken, främst engelska bokstäver, siffror och symboler. Unicode löser detta problem genom att tilldela ett unikt numeriskt värde, känt som en kodpunkt, till varje tecken i alla kända skriftsystem. Detta gör att Python kan hantera text från många olika språk, inklusive bokstäver, symboler, emojis och andra specialtecken.

Unicode i Python

I Python 3 hanteras alla strängar som Unicode-strängar som standard. Det innebär att Python automatiskt hanterar Unicode-tecken på ett korrekt sätt. Du behöver inte längre oroa dig för att konvertera mellan olika teckenuppsättningar som i äldre versioner av Python.

Exempel på Unicode-strängar i Python:


my_string = "Hej världen!"
print(my_string)

unicode_string = "こんにちは世界"
print(unicode_string)
  

I det här exemplet är båda strängarna Unicode-strängar. Den första innehåller en enkel engelsk fras, medan den andra innehåller japanska tecken. Python behandlar båda på samma sätt, vilket underlättar hantering av internationell text.

Kodpunkter och kodningar

Unicode definierar kodpunkter, som är unika numeriska värden som motsvarar varje tecken. För att lagra och överföra Unicode-text måste vi använda en kodning. En kodning specificerar hur dessa kodpunkter representeras som sekvenser av bytes.

Vanliga Unicode-kodningar:

  • UTF-8: En variabel längdskodning som är den mest populära metoden för att hantera Unicode-text.
  • UTF-16: En fast längdskodning som ofta används av operativsystem som Windows.
  • UTF-32: En fast längdskodning som använder 4 bytes per tecken.

Hantering av kodningar i Python

För att ta reda på vilken kodning som används av standardutgången (t.ex. konsolen) kan du använda sys.stdout.encoding.


import sys

print(sys.stdout.encoding)
  

Konvertera mellan olika kodningar:


text = "你好世界"

# Konvertera till UTF-8
utf8_text = text.encode('utf-8')

# Konvertera tillbaka till Unicode
unicode_text = utf8_text.decode('utf-8')
  

Arbeta med Unicode-tecken

Python erbjuder flera funktioner för att hantera Unicode-tecken på olika sätt.

Några användbara funktioner:

  • ord(char): Returnerar den numeriska kodpunkten för ett tecken.
  • chr(code_point): Returnerar tecknet som motsvarar en given kodpunkt.
  • len(string): Returnerar antalet tecken i en sträng.
  • string.find(substring): Returnerar indexet för den första förekomsten av en understräng.
  • string.replace(old, new): Ersätter alla förekomster av en understräng med en annan.

Exempel:


char = 'A'
code_point = ord(char)
print(code_point) # Utmatning: 65

code_point = 97
char = chr(code_point)
print(char) # Utmatning: a
  

Unicode-funktioner i Python

Python innehåller många inbyggda funktioner för att hantera Unicode-text.

  • unicodedata.name(char): Returnerar det officiella namnet på ett tecken.
  • unicodedata.lookup(name): Returnerar tecknet som motsvarar ett givet namn.
  • unicodedata.category(char): Returnerar den generella kategorin för ett tecken.

Exempel:


import unicodedata

char = 'é'
name = unicodedata.name(char)
print(name) # Utmatning: LATIN SMALL LETTER E WITH ACUTE

name = "LATIN SMALL LETTER A WITH ACUTE"
char = unicodedata.lookup(name)
print(char) # Utmatning: á
  

Arbeta med Unicode-filer

Python kan läsa och skriva Unicode-filer utan problem.

Exempel:


with open("myfile.txt", "w", encoding="utf-8") as f:
  f.write("Hallo Welt!")

with open("myfile.txt", "r", encoding="utf-8") as f:
  content = f.read()
  print(content)
  

I exemplet ovan öppnas filen med kodningen ”utf-8” vilket säkerställer att filen sparas och läses med korrekt kodning.

Sammanfattning

Att arbeta med Unicode i Python är avgörande för att utveckla program som hanterar textdata korrekt. Python 3 erbjuder ett robust och användarvänligt system för att hantera Unicode-tecken, kodningar och filer. Genom att använda de verktyg och tekniker som presenterats i den här guiden, kan du säkerställa att dina program klarar av att hantera text från olika språk och skriftsystem på ett effektivt sätt.

Vanliga frågor (FAQ)

1. Vad är den grundläggande skillnaden mellan ASCII och Unicode?
ASCII är en äldre teckenstandard som endast kan representera ett begränsat antal tecken, främst engelska bokstäver och siffror. Unicode är en mer omfattande standard som kan hantera tecken från alla kända skriftsystem.

2. Hur kan jag bestämma kodningen för en fil?

Du kan använda biblioteket chardet för att identifiera kodningen för en fil.

3. Vad är skillnaden mellan str och bytes i Python 3?

str representerar en Unicode-sträng, medan bytes representerar en sekvens av bytes.

4. Hur konverterar jag en sträng till en bytes-sekvens?

Använd metoden encode() för att konvertera en sträng till en bytes-sekvens med en specifik kodning.

5. Hur kan jag hantera fel i samband med Unicode?

Använd parametern errors i metoderna encode() och decode() för att hantera eventuella Unicode-fel.

6. Vad representerar \u-escapes i Python?

\u-escapes är ett sätt att representera specifika Unicode-tecken direkt i Python-koden.

7. Hur kan jag säkerställa att Unicode-tecken visas korrekt i konsolen?

Kontrollera att din konsol är konfigurerad för att stödja och visa Unicode-tecken korrekt.

8. Hur hanterar jag Unicode-tecken i filnamn?

Det är viktigt att använda rätt kodning när du arbetar med filnamn, särskilt om de innehåller Unicode-tecken.

9. Hur hanterar jag Unicode-tecken på webbsidor?

Använd rätt charset-meta-tagg i HTML-koden för att ange webbsidans kodning.

10. Vad menas med ”Unicode Normalisering”?

Unicode Normalisering är en metod som säkerställer att text med samma betydelse representeras med samma kodpunkter.

Taggar: Python, Unicode, kodning, teckenuppsättning, språk, skriftsystem, kodpunkt, UTF-8, UTF-16, UTF-32, strängar, filer, funktioner, bibliotek, FAQ