z-of-a Zone of Avoidance

languages writing systems

Four Strokes or Three

A normalization rule can make two records look identical by removing the marks that kept them apart. Scripts and language records make the loss visible because they retain the original form alongside a reading.


The diagnostic model
You are seeing
  • Two issuer names collapse to one key after accent stripping
  • A transliterated vendor feed creates a sudden duplicate rate
  • Search recall improves after normalization while adverse matches increase
  • A language tag identifies the language but does not preserve the script or region
  • A normalized identifier can no longer be traced back to one raw record
The mechanism
Language classification keeps language, script, and regional status as separate properties, while writing-system work distinguishes a grapheme from its rendered form; a conversion can erase the one property that kept two representations apart.
The false friend
A supplier can issue genuinely duplicate identifiers, but those remain duplicates in the raw original form rather than appearing only after conversion.
The discriminating test
Compare collisions before and after every normalization step, then inspect whether the characters lost at the concentrating step carried a script, language, or phonemic distinction.

In 1993 Japan’s electronics industry association published a pamphlet objecting to Unicode’s Han unification.

The unification maps Chinese hanzi, Japanese kanji, Korean hanja and historical Vietnamese chữ Hán onto shared code points, treating regional glyph shapes as renderings of one underlying grapheme.

The complaint was not that software had failed to store a character. It was that software had decided which differences did not count.

The differences were real enough to draw. The grass radical has four strokes in Traditional Chinese and three in Simplified Chinese and Japanese. Other mappings bring Japanese shinjitai and kyūjitai forms under one identifier. The code point survives in every case, and the regional form is no longer available from the identifier alone.

That is the quiet version of a very common data failure. A pipeline strips accents, picks a Latin reading, folds case, or substitutes one script for another. Search improves, because near forms now find each other.

The join gets worse, because the same conversion deleted the only discriminator.

The code point renders text #

Unicode never claimed that Chinese, Japanese, Korean and Vietnamese records were the same thing. It created a common encoding treatment for character sets whose relationships are close enough for that particular purpose.

The field’s disagreement is about the boundary. Whether a given shape is an allograph, a variant of one grapheme, or a different character altogether depends on the use at hand, and the encoding was designed around one use.

None of which is cosmetic. The registry that Unicode maintains gives each script a short alphabetic code — Latin, Cyrillic, Han — and those codes are administrative coordinates for renderable text. They are not judgments about what language a text contains, and not verdicts on whether a script’s scholarly classification is settled.

That separation is the apparatus worth taking. A representation can carry a language property, a script property and a regional property at the same time, in three fields.

Treat any one of them as a substitute for another and the lost component becomes invisible rather than absent.

Language and script part company at the first real example #

BCP 47 keeps the layers apart deliberately. Its tags combine a language subcode with optional script and region subcodes, so zh-Hant-TW identifies Traditional-script Chinese as used in Taiwan and zh-Hans-CN identifies Simplified-script Chinese as used in China.

Both tags have Chinese in them.

They do not say the same thing, and a system that keeps only the language subcode has thrown the difference away while appearing to keep the information.

The opposite mistake is treating a script as a language. Devanagari writes well over a hundred languages, Hindi and Sanskrit and Marathi and Nepali and Konkani among them. Hangul was designed for Korean in the fifteenth century and has largely stayed with that one language.

The two names look comparable. Their relationship between script and language is nothing alike.

The historical record keeps making the point from the other direction. Chinese characters reached Japan as kanji, Korea as hanja and Vietnam as chữ Hán. Japan still uses them. Korea moved toward Hangul in the twentieth century. Vietnam replaced them with the Latin-based Quốc Ngữ.

One writing system crossed three language settings and then had three entirely different careers.

A normalised vendor name gets handled as though it has the simpler history: one label, progressively cleaned. A raw form and a reading are different records of the same object. A language tag and a script tag are different records of its setting.

A transformed string carrying neither is not a cleaner version of the record. It is a shorter one.

A reading cannot stand in for a source form #

The error becomes most tempting exactly where the original cannot be read.

Linear A is conventionally called logosyllabic on the strength of its resemblance to its deciphered relative Linear B. No Linear A text has been translated and its underlying language remains unidentified. Structural classification and a recovered reading are separate achievements, and only one of them has happened.

The Indus script is harder again. Farmer, Sproat and Witzel argued in 2004 that its short inscriptions and sign patterns mean it may not encode language at all. Parpola and Rao countered with modelling they say finds language-like patterning.

The question is open.

A transcription that pretended to be a pronunciation would not settle it. It would hide the unanswered question inside a familiar alphabet, where nobody would look for it again.

So the script record has learned to keep the raw object, because the reading may change. Barthel’s 1958 catalogue assigns Rongorongo six hundred glyph codes even though its function and date remain disputed. Mahadevan counted 419 distinct Indus signs; Wells counted nearly seven hundred four decades later.

That disagreement is not an inconvenience to be normalised away. It records different decisions about which shapes are variants, which are ligatures, and which are separate signs, and the raw corpus is what makes the disagreement resolvable at all.

The operational case has one advantage those objects do not. An undeciphered script may have no recoverable sound behind its source form. A data feed almost always has the raw bytes, right up until somebody overwrites them.

The collision has a location #

The useful question is not whether two normalised strings match. It is where in the pipeline their histories became one string.

Compare the collision groups at ingestion, then after Unicode handling, after script conversion, after transliteration, after accent stripping. Then look at what came off the characters at the step where a group suddenly expands.

If the originals were already identical, the supplier issued duplicates. If distinct source forms meet only after conversion, the conversion made the collision, and the conversion is the thing to change.

This is why a single canonical name is a poor primary key. It answers a retrieval question — what should be found together — and entity matching asks a different one: what may be treated as the same record.

Han unification decided which differences did not count, and for rendering text on a screen it decided correctly.

Nobody consulted it about primary keys.

The step where two records stopped being different is the step that took the identifying field off them, and it is the only place worth looking.

Diagram: Four Strokes or Three

Questions

What shows that normalization caused the duplicate?

The duplicate rate appears at one transformation step rather than in the raw records. A comparison of collision groups before and after accent stripping, transliteration, case folding, or script conversion shows whether one step converts distinct originals into one key. The decisive evidence is that the originals differ by characters carrying a language, script, or phonemic distinction and cease to differ only after that step.

Why is a language code not enough to identify a name?

A language code can describe only one layer of an identifier. BCP 47 tags combine an ISO 639 language subcode with optional ISO 15924 script and ISO 3166 region subcodes: `zh-Hant-TW` and `zh-Hans-CN` distinguish Traditional-script Chinese used in Taiwan from Simplified-script Chinese used in China. Removing the script and region components deletes information rather than merely shortening a label.

Can better search recall make matching less safe?

Yes. Normalization makes more spellings retrieve together, which can improve recall while also creating false equivalences. Unicode Han unification assigns shared code points to regional Chinese, Japanese, Korean, and historical Vietnamese character sets by treating some glyph forms as one grapheme. That is useful for encoding and retrieval, but it is not a finding that the regional forms have no identifying value in every operational context.

How should a feed keep transliterated names?

A feed should retain the raw form, the normalized form, the language and script tags, and the transformation version as separate fields. Automatic joins should stop when one normalization key maps to more than one raw value. ISO 15924 assigns scripts their own four-letter and three-digit codes because script identity is a separate encoding property; a language label alone cannot restore a discarded script form.

Could the supplier simply have sent two identical identifiers?

It could. Genuine duplicate identifiers exist independently of normalization, and their raw source forms remain identical. A conversion failure has a different signature: distinct raw forms become identical only after a particular rule is applied. That distinction matters because deduplicating the first case is a business decision, while joining the second case can merge records whose original representations were deliberately or materially different.

Sources

  1. "Altaic languages," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  2. "Chinese characters," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  3. "Creole language," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  4. "Cuneiform," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  5. "Devanagari," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  6. "Egyptian hieroglyphs," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  7. "Endangered language," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  8. "Endangered Languages Project," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  9. "Ethnologue," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  10. "Expanded Graded Intergenerational Disruption Scale," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  11. "Indus script," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  12. "Language isolate," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  13. "Linear A," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  14. "Linear B," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  15. "Maya script," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  16. "Niger–Congo languages," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  17. "Proto-writing," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  18. "Rongorongo," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  19. "Trans–New Guinea languages," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  20. "Undeciphered writing systems," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  21. "UNESCO Atlas of the World's Languages in Danger," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  22. "Varieties of Chinese," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  23. "Voynich manuscript," Wikipedia · Wikimedia Foundation (tertiary, 2026-08-13)
  24. Glottolog, "Glottolog Information" (secondary, 2026-08-13)