Skip to content

pdfkit: UTF-16BE text strings so accented titles are not mojibake - #24

Merged
tannevaled merged 1 commit into
mainfrom
text-strings
Sep 3, 2026
Merged

pdfkit: UTF-16BE text strings so accented titles are not mojibake#24
tannevaled merged 1 commit into
mainfrom
text-strings

Conversation

@tannevaled

Copy link
Copy Markdown
Contributor

/Title, /Author and bookmark /Title were written as byte strings, so a non-ASCII title — an accented section heading, a French document title — displayed as mojibake in a viewer.

Add pdfTextString: pure-ASCII stays a literal (…) string; text with any non-ASCII rune is written UTF-16BE with a BOM as a hex <FEFF…> string (astral characters as surrogate pairs). Used for the document Title/Author and every outline item title.

Tests cover the ASCII, accented (café), and astral (an emoji surrogate pair) encodings, and that a document's accented metadata/bookmark is UTF-16BE not raw UTF-8. 100% coverage, go vet, gofmt clean.

Makes bookmarks and metadata correct for accented (e.g. French) titles — the follow-up flagged when the outline landed.

🤖 Generated with Claude Code

/Title, /Author and bookmark /Title were written as byte strings, so a non-ASCII
title — an accented section heading, a French document title — displayed as
mojibake in a viewer.

Add pdfTextString: pure-ASCII text stays a literal (…) string; text with any
non-ASCII rune is written UTF-16BE with a leading BOM as a hex <FEFF…> string
(astral characters as surrogate pairs). Use it for the document Title/Author and
every outline item title.

Tests cover the ASCII, accented (café), and astral (an emoji surrogate pair)
encodings and that a document's accented metadata/bookmark is UTF-16BE, not raw
UTF-8; 100% coverage, go vet and gofmt clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@tannevaled
tannevaled merged commit f550168 into main Sep 3, 2026
1 check passed
@tannevaled
tannevaled deleted the text-strings branch September 3, 2026 19:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant