[Bug] Claude models normalize Unicode quotation marks to ASCII equivalents
Bug Description
All your models seem to have a blindness to:
U+2018 LEFT SINGLE QUOTATION MARK
U+2019 RIGHT SINGLE QUOTATION MARK
U+201C LEFT DOUBLE QUOTATION MARK
U+201D RIGHT DOUBLE QUOTATION MARK
They always return these as:
U+0027 APOSTROPHE
U+0022 QUOTATION MARK
For example:
Which unicode character is 0x201C?
==>
The Unicode character 0x201C is " (LEFT DOUBLE QUOTATION MARK).
This is incorrect (" not “)
Another example which will break code potentially:
const test = "„“‘’";
Echo the code back to me.
==>
const test = "„"''";
As far as I can tell, it is impossible to get any Claude model to output the left/right quotation marks.
Our use case is advanced document OCR (converting PDFs to structured data). This quotation blindness is a real issue.
I can see how in certain coding situations it could introduce very nasty bugs if the left/right quotation is incorrectly replaced with a straight one without the user being aware.
How To Reproduce
In Claude Code, with any model selected, enter:
Echo back to me: "„“‘’"
You will receive:
„"''"
(same result occurs in any Anthropic product that uses Sonnet, Haiku, Opus models 4 / 4.5)
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗