Een groot TXT-bestand vertalen: codering, hoofdstukken en regeleinden
Los de codering op, markeer de hoofdstukken en verwijder harde regeleinden voordat je een lang .txt-bestand vertaalt. Met voorbeeldbestanden, een gratis checker en een test met 9 runs.

Om een groot TXT-bestand te vertalen, moet je drie dingen voorbereiden voordat je het ergens uploadt. Zorg er eerst voor dat de tekst correct wordt gedecodeerd en sla het op als UTF-8. Zet ten tweede elke hoofdstuktitel op een eigen regel met een lege regel eromheen. Voeg ten derde, als het bestand regels afbreekt op een vaste breedte, die regels samen zodat elke alinea één regel is, met een lege regel tussen alinea's. Vertaal daarna het hele bestand en vergelijk achteraf het aantal alinea's en hoofdstukken tussen de bron en de vertaling.
Een plat tekstbestand heeft geen stijlen, geen koppen en geen metadata. Alles wat een vertaaltool over de structuur weet, komt uit de bytes en de regeleinden. Daarom komen dezelfde drie problemen steeds terug: de bytes worden in de verkeerde codering gelezen, de hoofdstukken zijn niet te onderscheiden van gewone regels, of de regeleinden zeggen niets over waar een zin eindigt.
We maakten voorbeeldbestanden in vier coderingen, schreven een gratis checker en vertaalden een hard afgebroken kort verhaal negen keer naar Vereenvoudigd Chinees met een lokaal model. Het model ging prima om met de harde afbrekingen toen het het hele bestand zag. Het brak zinnen af en gaf de actie van het ene personage aan het andere in alle drie de runs waarin het bestand op regelaantal in stukken was geknipt.
Snelle checklist
| Controle | Hoe het er goed uitziet | Hoe je het oplost |
|---|---|---|
| Codering | De eerste regels worden correct gelezen; het bestand is UTF-8 | Open opnieuw met de juiste codering en sla op als UTF-8 |
| Byte order mark | Geen, of een waarvan je op de hoogte bent | Sla op als "UTF-8" in plaats van "UTF-8 met BOM" als een tool klaagt |
| Hoofdstuktitels | Elk op een eigen regel, met een lege regel ervoor en erna | Repareer de paar titels die in de tekst doorlopen |
| Alinea's | Eén lege regel tussen alinea's | Voeg lege regels toe waar alinea's alleen met een inspringing beginnen |
| Harde afbreking | Elke alinea is één lange regel | Voeg regels binnen alinea's samen, maar laat poëzie, brieven en lijsten met rust |
| Regeleinden | Eén stijl door het hele bestand | Converteer oude Mac-CR-regeleinden; LF en CRLF zijn beide prima |
| Beschadigde tekst | Geen �-tekens | Haal een betere kopie. Converteren kan verloren tekens niet terugbrengen |
De checker rapporteert over elke regel en corrigeert de codering, de byte order mark, de regeleinden en harde regelafbrekingen. Hoofdstuktitels en ontbrekende lege regels moet je zelf met de hand aanpassen. Voer python3 check_txt.py inspect yourfile.txt uit om het rapport te zien, en python3 check_txt.py convert yourfile.txt clean.txt --unwrap om een UTF-8-kopie te schrijven met de alinea's aan elkaar geplakt. Het vereist alleen Python 3 en het originele bestand wordt nooit gewijzigd.
Stap 1: Zorg voor de juiste codering
Een TXT-bestand is een reeks bytes. De codering is de regel die die bytes omzet in tekens, en het bestand vermeldt niet welke regel is gebruikt. Als een programma verkeerd gokt, krijg je mojibake: tekst die door elkaar is gehaald, of erger, tekst die er goed uitziet maar niet is wat er is geschreven.
Hier is dezelfde Chinese zin, 最后一班渡轮 ("de laatste veerboot"), gelezen met de verkeerde regel. We hebben deze gegenereerd met de ingebouwde codecs van Python, en je kunt ze reproduceren met de voorbeeldbestanden.
| Opgeslagen als | Gelezen als | Wat je ziet |
|---|---|---|
| GB18030 | Windows-1252 | ×îºóÒ»°à¶ÉÂÖ |
| GB18030 | UTF-8 | ���һ����� |
| UTF-8 | GBK | 鏈�鍚庝竴鐝�娓¤疆 |
| Shift_JIS (Japans 最後のフェリー) | GBK | 嵟屻偺僼僃儕乕 |
De laatste rij is de gevaarlijke. Japanse bytes die als Chinees worden gelezen, leveren echte Chinese tekens op, zonder fout en zonder �. Een vertaaltool vertaalt ze met plezier, en het resultaat is onzin met een goede grammatica.
Onze checker laat zien waarom je niet kunt vertrouwen op "het opende zonder fouten". Toen we hem op het Shift_JIS-voorbeeld uitvoerden, decodeerden twee coderingen het hele bestand zonder één enkele fout:
encoding: unknown (not UTF-8)
these legacy encodings decode without errors; read the previews,
because a wrong one can still produce real-looking characters:
gb18030 戞堦榖丂嵟屻偺僼僃儕乕
cp932 第一話 最後のフェリー
Alleen de tweede regel is Japans. De eerste is een reeks zeldzame Chinese tekens die niemand heeft geschreven. Op het GB18030 Chinese voorbeeld decodeerden vijf coderingen zonder fouten, en slechts één daarvan, GB18030, toonde de hoofdstuktitel 第一章 最后一班渡轮. De regel is dus eenvoudig: bepaal de codering door de eerste regels te lezen, niet door of een programma een foutmelding gaf.
Waar de gissingen meestal misgaan:
- Chinese tekst van oudere Windows-systemen of Chinese sites is vaak GBK of GB18030. GB18030 dekt alles wat GBK doet, en de WHATWG Encoding Standard, die browsers volgen, gaat verder: er staat "GBK's decoder is gb18030's decoder." Als een bestand GBK is, werkt openen als GB18030.
- Traditioneel Chinees uit Taiwan of Hongkong is vaak Big5.
- Japans is vaak Shift_JIS, of Microsoft's uitgebreide versie daarvan, die Windows en Python cp932 noemen.
- Koreaans is vaak EUC-KR.
- Een bestand vol NUL-bytes, of een bestand waarbij elk ander teken leeg lijkt, is meestal UTF-16 zonder byte order mark.
Een byte order mark (BOM) is een korte onzichtbare code aan het begin van een bestand die UTF-8, UTF-16 of UTF-32 aankondigt. Als er een aanwezig is, vertrouw erop. Dezelfde standaard zegt dat "the byte order mark is more authoritative than anything else." Onze checker leest eerst de BOM en gokt alleen als die er niet is.
Sla het bestand op als UTF-8
Zodra de tekst correct leesbaar is, sla je het bestand op als UTF-8. De WHATWG-standaard noemt UTF-8 "the most appropriate encoding for interchange of Unicode," en het is de veiligste keuze voor elke vertaaltool.
Er is een tweede reden die specifiek voor vertaling van belang is. Legacy-coderingen dekken alleen de tekens van hun eigen regio. Shift_JIS heeft geen code voor 这, het eerste teken van 这是最后一班渡轮, en Big5 heeft er ook geen code voor, omdat het een Vereenvoudigd Chinees teken is. Windows-1252 kan geen Cyrillisch opslaan. Als het vertaalde bestand moet worden teruggeschreven in de oorspronkelijke legacy-codering, past de doeltaal mogelijk niet. BookTranslator's TXT-vertaler zegt dat hij veelvoorkomende coderingen automatisch detecteert en het vertaalde bestand teruggeeft "met dezelfde codering als de invoer", dus door met UTF-8 te beginnen vervalt de vraag helemaal.
Je kunt converteren in een teksteditor (open met de juiste codering en kies dan "Opslaan als" UTF-8), met iconv -f GB18030 -t UTF-8 in.txt > out.txt op macOS of Linux, of met de checker:
python3 check_txt.py convert book.txt book-utf8.txt --encoding gb18030
Als het bestand al �-tekens bevat, is de schade ontstaan voordat je het kreeg. Opnieuw converteren herstelt de ontbrekende tekens niet. Zoek een betere kopie van de bron.
Stap 2: Maak hoofdstukken makkelijk vindbaar
Hoofdstukken zijn om drie redenen belangrijk. Een lang bestand wordt in stukken vertaald, en hoofdstukovergangen zijn de schoonste plekken om te knippen. Je wilt elk hoofdstuk na de vertaling controleren. En als je de tekst later omzet naar een e-book, worden de hoofdstuktitels de inhoudsopgave.
Zet elke titel op een eigen regel, met een lege regel ervoor en erna, en gebruik in het hele boek één patroon. Dit zijn de patronen die onze checker telt:
Chapter 1,Chapter One: The Last Ferry,Part Two,Prologue,Epilogue第一章,第12回,第三話,第二卷- een getal of een Romeins cijfer alleen op een regel, zoals
12ofXII.
Voer inspect uit en lees de lijst met gevonden titels. Als het boek 40 hoofdstukken heeft en de checker vindt er 37, dan verstoppen drie titels zich: één loopt door in de eerste zin, één gebruikt een ander woord zoals "Ch. 7", of één heeft tekst op dezelfde regel. Repareer die drie met de hand. Dat kost minder tijd dan het probleem in een vertaald bestand vinden.
Stap 3: Verwijder harde regeleinden, voorzichtig
Sommige TXT-bestanden breken elke regel op een vaste breedte, zodat de tekst in een gewone terminal of een smal venster past. Tekst die uit PDF's is gekopieerd en OCR-uitvoer doen hetzelfde op de breedte van de gedrukte pagina. In deze bestanden betekent een regeleinde "de regel was vol", niet "de zin of alinea eindigde."
Harde regeleinden zijn makkelijk te herkennen. In ons hard-wrapped voorbeeld meldde de checker:
non-empty lines: 43; longest line: 66 chars; 25 lines within 12 chars of the longest
line breaks inside paragraphs that do not end a sentence: 23
looks hard-wrapped: consider convert --unwrap
De oplossing is om de regels binnen elke alinea samen te voegen en de lege regels tussen alinea's te behouden. De valkuil is tekst waarvan de regeleinden echt zijn: poëzie, songteksten, brieven, adressen, recepten en lijsten. Ons voorbeeld bevat een brief van vijf regels:
My dear Mara,
The key is under the blue pot.
Do not let your uncle sell the boat.
With love, always,
Nonna
Een botte "vervang elk enkel regeleinde door een spatie" maakt daar één doorlopende regel van. De --unwrap van de checker voegt een alinea alleen samen wanneer de meeste regels bijna de volledige breedte halen, dus blokken met korte regels zoals deze brief blijven ongemoeid. Op ons voorbeeld reconstrueerde hij het oorspronkelijke niet-gewrapte bestand exact, byte voor byte, brief inbegrepen. Controleer in je eigen bestand een paar samengevoegde alinea's en elk versblok voordat je erop vertrouwt.
Nog twee details. Wanneer je regels Chinese of Japanse tekst samenvoegt, voeg dan geen spatie toe; de checker voegt CJK-regels samen, inclusief regels die eindigen op CJK-leestekens, zonder spatie. En als je tekst uit OCR komt, kunnen woorden ook met koppeltekens aan het einde van regels zijn gesplitst, wat eigen keuzes vereist. Onze gids voor het oplossen van OCR-regeleinden en afbrekingen behandelt dat.
Wat we hebben getest: hard-wrapped tekst, heel versus opgeknipt
We wilden weten of harde regeleinden de vertaling daadwerkelijk schaden, of dat het alleen rommelig oogt. We schreven een kort verhaal van 396 woorden voor de test: drie hoofdstukken, vijftien alinea's, dialoog, de brief hierboven, en een * * * scènebreuk. We sloegen het twee keer op met dezelfde woorden: zonder regeleinden, met één alinea per regel, en hard afgebroken op 66 tekens, dat 43 niet-lege regels heeft in plaats van 19.
Daarna vroegen we een lokaal model om het op drie manieren naar Vereenvoudigd Chinees te vertalen, elk drie keer:
- Afgebroken, hele bestand. Het hard afgebroken bestand in één verzoek.
- Niet afgebroken, hele bestand. Het niet-afgebroken bestand in één verzoek.
- Afgebroken, elke 12 regels geknipt. Het hard afgebroken bestand elke 12 regels opgesplitst, één verzoek per stuk, de antwoorden weer samengevoegd. Dit is wat er gebeurt wanneer een script of tool een lang bestand op regelaantal splitst in plaats van op alinea.
Het model was Qwen 3.6 27B (Q4_K_M) in LM Studio, met thinking uitgeschakeld en temperatuur 0.3, op een Apple M4 Max met 64 GB geheugen. Elk verzoek gebruikte dezelfde prompt van één zin. We voerden het uit op 28 oktober 2026. Het script is run_llm_txt_test.py, alle negen uitvoer is ongewijzigd gepubliceerd, en results.csv heeft één rij per run.
| Afgebroken, hele bestand | Niet afgebroken, hele bestand | Afgebroken, elke 12 regels geknipt | |
|---|---|---|---|
| Alinea's behouden (15) | 3 van 3 runs | 3 van 3 runs | 0 van 3 (14 elke keer) |
| Hoofdstukkoppen behouden (3) | 3 van 3 | 3 van 3 | 3 van 3 |
| Brief behouden als vijf regels | 3 van 3 | 3 van 3 | 3 van 3 |
| Zinnen afgekapt op een splitspunt | 0 | 0 | 3 in elke run |
| Actie aan het verkeerde personage toegewezen | 0 | 0 | 3 van de 3 uitvoeringen |
De eerste bevinding verraste ons. Toen het model het hele hard-wrapped bestand zag, voegde het de regels zelf samen. Alle drie de uitvoer had één alinea per regel, dezelfde 19 regels als de niet-gewrapte uitvoeringen, en las net zo goed. Dus hard wrapping alleen deed dit model op dit korte bestand geen kwaad.
Het bestand opdelen op regelaantal deed wél pijn, steeds op dezelfde plekken. Drie van de stukken van 12 regels eindigden midden in een zin. Het eerste eindigt op "He pointed with his" en het volgende stuk begint met "pen at a three-storey building on the corner." Apart vertaald verloor de tweede helft zijn onderwerp. In twee uitvoeringen kwam het terug als 她瞥了一眼街角那栋三层楼的建筑, "ze wierp een blik op het drie verdiepingen tellende gebouw op de hoek." In de derde eindigde het met 随后她重新回到填字游戏上, "toen ging ze terug naar de kruiswoordpuzzel." In het verhaal wijst de man in het loket en gaat terug naar zijn kruiswoordpuzzel. In alle drie de uitvoeringen zou een lezer van het Chinees denken dat Mara dat deed.
De tweede knip, tussen "the careful, slightly old-fashioned hand she had learned at a" en "convent school," liet de Chinese zin in alle drie de uitvoeringen hangen bij 那是她在, "dat was waar zij," (één uitvoering voegde een losse 一 toe), en het woord "learned" verdween. De derde knip splitste de zin over de luiken over twee regels, en de tweede helft veranderde "painted, not well, but not long ago" in afbladderende verf: 油漆虽已斑驳 in twee uitvoeringen en 油漆剥落 in de derde. En omdat de stukken met een enkele regelafbreking werden samengevoegd, verdween de lege regel vóór de scèneovergang, waardoor elke uitvoering 14 alinea's had in plaats van 15. Onze checker ving het aantal alinea's. Het kon het verkeerde teken niet vangen; dat vonden we door te lezen.
Wat dit betekent voor jouw bestand:
- Unwrappen beschermt je tegen splitsers die je niet onder controle hebt. Elk lang bestand wordt ergens gesplitst, of dat nu door je eigen script, de limiet van een chatvenster of de tool waar je naartoe uploadt gebeurt. Als alinea's enkele regels zijn gescheiden door lege regels, kan elke redelijke splitter tussen alinea's knippen in plaats van binnen een zin.
- De ergste fouten waren vloeiend. "Ze wierp een blik op het gebouw" is goed Chinees. Een lezer zou de vreemde regelafbrekingen bij elke knip opmerken en het losse 那是她在, maar niets markeert het verkeerde teken of de afbladderende verf als fout. Fouten op splitspunten zijn eerst betekenis fouten, dan opmaakfouten.
- Dit was één model en één kort verhaal. Een bestand dit kort past in één verzoek, dus de hele-bestand-uitvoeringen hoefden nooit iets te splitsen. Een volledige roman moet wél worden gesplitst, en dat is precies wanneer de voorbereiding in stappen 1 tot en met 3 zijn vruchten afwerpt. Deze bestanden testen voorbereiding en splitsing, niet de eigen pijplijn van BookTranslator.
Een kleinere observatie: over de zes hele-bestand-uitvoeringen schreef het model Mara's naam als 玛拉 in vijf en 马拉 in één. Elke uitvoer was consistent met zichzelf, maar afzonderlijke verzoeken waren het niet met elkaar eens. Voor een lang boek dat in veel stukken wordt vertaald, houdt een lijst met namen en hun afgesproken spelling elk hoofdstuk in lijn. Onze glossary-gids laat zien hoe je er een maakt.
Stap 4: Vertalen, dan de tellingen controleren
Als het bestand schoon is, is het vertalen het makkelijke deel. Je kunt het uploaden naar BookTranslator's TXT-vertaler, die .txt-, .md- en .mdx-bestanden accepteert, naar verluidt TXT-bestanden tot 300 MB aankan en de prijs toont vóór het afrekenen. Er is geen gratis volledige vertaling, maar de upload zelf vertelt je de kosten. Als je liever met een chatmodel of een lokale LLM werkt, splits het bestand dan zelf op hoofdstuk- of alineagrenzen en houd een woordenlijst bij voor namen. Als je tekst Markdown is in plaats van gewone prose, zie onze Markdown-vertaalgids, want Markdown-syntaxis heeft zijn eigen regels nodig.
Vergelijk na het vertalen de twee bestanden:
python3 check_txt.py compare book-utf8.txt book-translated.txt
Als een van beide bestanden niet UTF-8 is, voeg dan --source-encoding of --translated-encoding toe. De hoofdstukcontrole kent Engelse en Chinese/Japanse kop patronen; voor andere doeltalen voeg je het lokale woord voor "hoofdstuk" toe aan het patroon bovenaan het script.
Dit is het rapport voor een van onze opgedeelde uitvoeringen:
source translated
paragraphs 15 14 <- differs
chapter headings 3 3
non-empty lines 43 24 <- differs
scene breaks (* * *) 1 1
replacement chars 0 0
source script LATIN characters left in translation: 0
Lees het zo:
- Alinea's en hoofdstukkoppen zouden moeten overeenkomen. Een ontbrekende alinea betekent vaak dat twee zijn samengevoegd of één is weggevallen.
- Niet-lege regels kunnen om een goede reden verschillen. Onze hele-bestand-gewrapte uitvoeringen gingen van 43 naar 19 regels omdat het model de hard-wrapped regels samenvoegde, wat een verbetering was. Vergelijk regels alleen als de bron al niet-gewrapt was.
- Overgebleven tekens uit het bronschrift wijzen op passages die helemaal niet zijn vertaald. Een paar is normaal voor namen, producttermen of citaten; een reeks ervan is een overgeslagen sectie.
- Vervangingstekens in de vertaling betekenen een coderingsprobleem bij de uitvoer.
Tellingen kunnen je niet vertellen of de vertaling juist is. Lees de eerste en laatste alinea van elk hoofdstuk, en de alinea's aan weerszijden van elke plek waar het bestand is gesplitst. Daar vond onze test elke ernstige fout.
Veelgestelde vragen
Waarom ziet mijn TXT-bestand er in het ene programma goed uit en in het andere onleesbaar?
De twee programma's gokten verschillende coderingen. Eén gokte goed. Zoek de codering die de tekst correct weergeeft en sla het bestand vervolgens op als UTF-8, zodat elk programma het op dezelfde manier leest.
Moet ik een TXT-bestand converteren naar EPUB of DOCX voordat ik het vertaal?
Alleen als je wilt wat die formaten toevoegen. Een schoon TXT-bestand met duidelijke hoofdstukken laat zich prima vertalen zoals het is. Wil je een inhoudsopgave, hoofdstuknavigatie en een ebook dat je op een apparaat kunt lezen, dan loodst onze gids over een webroman omzetten naar een vertaalklare EPUB je erdoorheen.
Kan ik een TXT-bestand met meerdere talen vertalen?
Ja, maar vertel de vertaler wat hij met rust moet laten. Citaten of termen in een derde taal, en namen die in hun oorspronkelijke schrift moeten blijven, bescherm je makkelijker met een woordenlijst of een korte instructie dan dat je ze achteraf moet repareren.
Hoe zit het met een TXT-bestand dat ik van een website heb gedownload?
Controleer of je het mag gebruiken. Voor boeken in het publieke domein of bestanden die je zelf hebt geschreven, gelden de bovenstaande stappen. De codering of het formaat van een bestand zegt niets over het auteursrecht.
Gerelateerde berichten





