[Bug] Claude models normalize Unicode quotation marks to ASCII equivalents

Resolved 💬 3 comments Opened Dec 8, 2025 by six5536 Closed Dec 12, 2025

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)

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗