encodingAan de slag met codering


Opmerkingen

Wat is een codering en hoe werkt het?

Een computer kan geen letters of iets anders opslaan - het slaat bits op. Bit kan 0 of 1 zijn ("ja" / "nee", "waar" / "onwaar" - deze formaten worden daarom binair genoemd). Om deze bits te gebruiken, zijn enkele regels vereist om de bits om te zetten in bepaalde inhoud. Er zijn regels die coderingen worden genoemd, waarbij reeksen van 1/0 bits staan voor bepaalde tekens. Een reeks van 8 bits wordt byte genoemd .

Coderingen werken als tabellen, waarbij elk teken is gerelateerd aan een specifieke byte. Om iets in ASCII-codering te coderen, moet men de ingangen van rechts naar links volgen, op zoek naar bits gerelateerd aan karakters. Om een reeks bits in tekens te decoderen, vervangt men bits van links naar rechts.

Bytes kunnen in verschillende formaten worden weergegeven: bijvoorbeeld 10011111 in binair 10011111 is 237 in octaal, 159 in decimaal en 9F in hexadecimaal formaat.

Wat is het verschil tussen verschillende coderingen?

Eerste karaktercodering zoals ASCII uit het pre-8-bit tijdperk gebruikte slechts 7 bits van 8. ASCII werd gebruikt om de Engelse taal te coderen met alle 26 letters in kleine en hoofdletters, cijfers en veel leestekens. ASCII kon geen andere Europese talen dekken met alle ö-ß-é-å letters - daarom werden coderingen ontwikkeld die het 8-ste bit van een byte gebruikten om nog eens 128 tekens te dekken.

Maar één byte is niet voldoende om talen met meer dan 256 tekens weer te geven - bijvoorbeeld Chinees. Het gebruik van twee bytes (16 bits) maakt codering mogelijk van 65.536 verschillende waarden. Coderingen zoals BIG-5 scheiden een reeks bits in blokken van 16 bits (2 bytes) om tekens te coderen. Multi-byte coderingen hebben het voordeel dat ze ruimtebesparend zijn, maar het nadeel dat bewerkingen zoals het vinden van substrings, vergelijkingen, enz. Allemaal de tekens moeten decoderen naar unicode codepunten voordat dergelijke bewerkingen kunnen worden uitgevoerd (er zijn echter enkele snelkoppelingen ).

Een ander type codering zijn dergelijke met een variabel aantal bytes per teken - zoals UTF-normen. Deze standaarden hebben een eenheidsgrootte, die voor UTF-8 8 bits is, voor UTF-16 16 bits is en voor UTF-32 32 bits is. En dan definieert de standaard enkele bits als vlaggen: als ze zijn ingesteld, moet de volgende eenheid in een reeks eenheden worden beschouwd als onderdeel van hetzelfde karakter. Als ze niet zijn ingesteld, vertegenwoordigt dit apparaat slechts één teken volledig (Engels bezet bijvoorbeeld slechts één byte en daarom codeert ASCII kaarten volledig naar UTF-8).

Wat is de Unicode?

Unicode als een enorme tekenset (op een begrijpelijkere manier zeggen - een tabel) met 1,114,112 codepunten, elk van hen staat voor een specifieke letter, symbool of een ander teken. Met Unicode kunt u een document schrijven dat theoretisch elke taal bevat die door mensen wordt gebruikt.

Unicode is geen codering - het is een set codepunten. En er zijn verschillende manieren om Unicode-codepunten in bits te coderen - zoals UTF-8, -16 en -32.

Hoe de codering van een tekstbestand met Python te detecteren?

Er is een handig pakket in Python - chardet, dat helpt bij het detecteren van de codering die in uw bestand wordt gebruikt. Er is eigenlijk geen programma dat met 100% zekerheid kan zeggen welke codering is gebruikt - dat is de reden waarom chardet de codering met de hoogste waarschijnlijkheid geeft waarmee het bestand is gecodeerd. Chardet kan de volgende coderingen detecteren:

  • ASCII, UTF-8, UTF-16 (2 varianten), UTF-32 (4 varianten)
  • Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (traditioneel en vereenvoudigd Chinees)
  • EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (Japans)
  • EUC-KR, ISO-2022-KR (Koreaans)
  • KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic)
  • ISO-8859-2, windows-1250 (Hongaars)
  • ISO-8859-5, windows-1251 (Bulgaars)
  • windows-1252 (Engels)
  • ISO-8859-7, windows-1253 (Grieks)
  • ISO-8859-8, windows-1255 (Visueel en logisch Hebreeuws)
  • TIS-620 (Thais)

U kunt chardet installeren met een pip- opdracht:

pip install chardet
 

Daarna kunt u chardet gebruiken op de opdrachtregel:

% chardetect somefile someotherfile
somefile: windows-1252 with confidence 0.5
someotherfile: ascii with confidence 1.0
 

of in python:

import chardet    
rawdata = open(file, "r").read()
result = chardet.detect(rawdata)
charenc = result['encoding']
 

Installatie of instellingen

Gedetailleerde instructies voor het instellen of installeren van codering.