Je exporteert een tabel. Je opent de CSV. In plaats van "José" zie je "José". In plaats van "€" zie je "€". In plaats van een em-streepje zie je "â€"".
Welkom in de encoding-hel.
Deze gids legt uit waarom het gebeurt en hoe je het oplost — of je nu handmatig exporteert of extractietools bouwt.
Wat Er Werkelijk Gebeurt
Tekencodering is hoe computers tekst als bytes representeren. Verschillende coderingen gebruiken verschillende bytepatronen voor hetzelfde karakter.
De meest voorkomende boosdoener: UTF-8 geïnterpreteerd als Latin-1 (of andersom).
UTF-8 gebruikt meerdere bytes voor niet-ASCII-tekens. Wanneer software die bytes leest als Latin-1 (single-byte codering), wordt elke byte een apart verminkt teken.
| Teken | UTF-8 bytes | Verkeerd gelezen als Latin-1 |
|---|---|---|
| é | C3 A9 | é |
| € | E2 82 AC | € |
| — | E2 80 94 | â€" |
| ñ | C3 B1 | ñ |
Het patroon is consistent: multi-byte sequenties worden meerdere verkeerde tekens.
Waar Encoding Breekt
1. De Bronpagina
De website declareert mogelijk één codering maar serveert een andere. Of declareert niets, waardoor browsers moeten raden.
<!-- Declareert UTF-8 -->
<meta charset="UTF-8">
<!-- Maar de server stuurt -->
Content-Type: text/html; charset=ISO-8859-1
Bij conflicterende declaraties kiezen browsers meestal correct. Exporttools mogelijk niet.
2. Het Exportproces
Als je extractietool de encoding niet behoudt, worden bytes opnieuw geïnterpreteerd.
JavaScript's textContent retourneert Unicode-strings, wat veilig is. Maar het converteren naar een bestand vereist het kiezen van een codering. Als die keuze fout is, treedt corruptie op.
3. De Applicatie die het Bestand Opent
Je exporteert een valide UTF-8 CSV. Excel opent het als Latin-1 omdat het verkeerd raadt. Dezelfde corruptie, andere oorzaak.
Daarom ziet hetzelfde bestand er in de ene applicatie prima uit en in de andere gebroken.
Het Probleem Diagnosticeren
Patroonherkenning
Bepaalde verminkingen zijn diagnostisch:
| Je ziet | Origineel was |
|---|---|
| á, é, Ã, ó, ú | á, é, í, ó, ú (Spaanse accenten) |
| ä, ö, ü | ä, ö, ü (Duitse umlauten) |
| ç | ç (cedille) |
| € | € (Euro-teken) |
| â€" | — (em-streepje) |
| ’ | ' (gebogen apostrof) |
Als je à gevolgd door een ander teken ziet, werd UTF-8 gelezen als Latin-1.
De Ruwe Bytes Controleren
In Python:
with open('file.csv', 'rb') as f:
print(f.read(100))
Als je \xc3\xa9 ziet waar je "é" verwacht, is het bestand UTF-8. Als je \xe9 ziet, is het Latin-1.
Controleren Wat de Pagina Declareert
In de browser-devtools:
document.characterSet // Retourneert de werkelijk gebruikte codering
Gecorrumpeerde Bestanden Herstellen
De Her-codeer Truc
Als UTF-8 verkeerd werd gelezen als Latin-1, kun je het omdraaien:
# Lees als Latin-1 (hoe het verkeerd werd geïnterpreteerd)
with open('corrupted.csv', 'r', encoding='latin-1') as f:
text = f.read()
# Codeer terug naar Latin-1 bytes, decodeer dan als UTF-8
fixed = text.encode('latin-1').decode('utf-8')
with open('fixed.csv', 'w', encoding='utf-8') as f:
f.write(fixed)
Dit werkt alleen als de corruptie een simpele misinterpretatie was. Dubbele corruptie of gemengde encodings zijn moeilijker.
Excel Dwingen om UTF-8 te Lezen
Excel negeert vaak UTF-8. Twee oplossingen:
Optie 1: BOM Toevoegen
Een Byte Order Mark aan het begin van het bestand signaleert UTF-8:
with open('file.csv', 'w', encoding='utf-8-sig') as f:
f.write(data)
Optie 2: Importwizard
In plaats van dubbelklikken op de CSV, gebruik Gegevens → Uit tekst/CSV en specificeer handmatig UTF-8 codering.
Google Sheets als Tussenstap
Google Sheets gaat beter om met encoding dan Excel. Importeer de CSV daar, exporteer dan naar XLSX. Het Excel-bestand behoudt de tekens correct.
Encoding-problemen Voorkomen
Bij Handmatig Exporteren
Gebruik tools die correct met encoding omgaan. HTML Table Exporter behoudt Unicode gedurende het hele exportproces en vermijdt de conversiefouten die mojibake veroorzaken.
Kies bij CSV-exports, als je tool encoding-opties biedt, UTF-8 met BOM voor Excel-compatibiliteit.
Bij het Bouwen van Extractietools
Wees altijd expliciet over encoding:
# CSV schrijven
with open('output.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerows(data)
# HTML lezen
response = requests.get(url)
response.encoding = response.apparent_encoding # Auto-detectie
html = response.text
Voor JavaScript/browserextensies:
// Blob met expliciete encoding
const blob = new Blob(['\ufeff' + csvContent], {
type: 'text/csv;charset=utf-8;'
});
De \ufeff is de BOM die Excel helpt.
Bij het Gebruik van Pandas
# Lezen
df = pd.read_csv('file.csv', encoding='utf-8')
# Schrijven met BOM voor Excel
df.to_csv('output.csv', encoding='utf-8-sig', index=False)
Speciale Tekens die Problemen Veroorzaken
Slimme Aanhalingstekens en Apostroffen
Tekstverwerkers converteren rechte aanhalingstekens naar gebogen:
- ' → ' (U+2019)
- " → " " (U+201C, U+201D)
Deze zijn multi-byte in UTF-8 en breken in Latin-1.
Em- en En-streepjes
- — (em-streepje, U+2014)
- – (en-streepje, U+2013)
Veelvoorkomend in financiële data en publicaties.
Vaste Spaties (Non-Breaking Spaces)
Een gewone spatie is 0x20. Een vaste spatie is 0xA0 (Latin-1) of 0xC2 0xA0 (UTF-8).
Deze zijn onzichtbaar maar breken stringvergelijkingen en parsing.
# Spaties normaliseren
text = text.replace('\xa0', ' ')
Valutasymbolen
€, £, ¥ vallen allemaal buiten ASCII en coderen anders in UTF-8 vs Latin-1.
Snelle Referentie
| Probleem | Waarschijnlijke oorzaak | Oplossing |
|---|---|---|
| Ã gevolgd door teken | UTF-8 gelezen als Latin-1 | Her-coderen of UTF-8 opgeven bij import |
| ? of □ vervangt tekens | Codering ondersteunt teken niet | Gebruik overal UTF-8 |
| Excel toont rommel | Excel raadde verkeerde codering | Gebruik UTF-8 BOM of importwizard |
| Onzichtbare tekens breken data | Vaste spaties of zero-width tekens | Normaliseer witruimte |
De Fundamentele Regel
Stem de encoding af bij elke stap. Exporteer als UTF-8. Open als UTF-8. Sla op als UTF-8.
Het moment dat één stap een andere codering gebruikt, worden tekens gecorrumpeerd.
Bij twijfel is UTF-8 met BOM de veiligste keuze voor bestanden die Excel aanraken.
Wil je exports die correct met encoding omgaan? Meer info op gauchogrid.com/nl/html-table-exporter of probeer HTML Table Exporter gratis in de Chrome Web Store. Bekijk ook onze vergelijking van de beste Chrome-extensies voor het exporteren van tabellen.
Top comments (0)