Type 干杯 into a simplified-to-traditional converter and you get 乾杯. Correct — it is a toast.
Now type 干了一杯. Same word, one character inserted between the two. The result comes back 幹了一杯, and in Taiwan that reads as an obscenity.
The converter did not malfunction. It did exactly what it was built to do, and its failure explains most of the badly converted traditional Chinese you will ever see.
One simplified character, several traditional ones
The simplification process merged characters. 幹 (to do, a trunk), 乾 (dry) and 干 (a shield, and the 干 of 若干) were three distinct characters that all became 干. Converting back, a single input has three possible outputs, and the text alone does not contain enough to choose between them.
The same merge happened to a small, extremely common set. 发 stands for both 發 (to issue) and 髮 (hair). 面 covers 面 (face) and 麵 (noodles, flour). 后 covers 後 (after) and 后 (empress). 里 covers 裏/裡 (inside) and 里 (the distance unit, and 邻里). 只, 系, 钟, 松 and 台 all behave the same way.
This is not an obscure corner of the language. These are among its most frequent characters, so the failures appear in ordinary sentences, not just edge cases. Our easily-confused characters reference groups the merged pairs alongside the same-shape and same-sound sets they are often mistaken for.
What the converter is actually doing
A converter that worked character by character would be wrong roughly half the time on every ambiguous character. So none of them work that way. The widely used open-source engine ships three separate dictionaries, and the interesting one is not the one people assume.
In the JavaScript build that most web tools use, the character dictionary holds 3,882 entries and the phrase dictionary holds 49,276. The phrase dictionary is more than twelve times larger, because that is where the actual decisions live. 头发 is in it, and resolves to 頭髮. 理发 is in it. 发型, 发现, 干杯, 干活, 面条, 面对 are all in it — 1,539 phrases containing 发 alone, and 1,008 containing 干.
A third dictionary, of 39 entries, handles regional preference rather than meaning: it is what turns 裏 into 裡 for Taiwan, which is why 里面 comes out 裡面 and not 裏面.
The rule is that the longest matching phrase wins. Conversion is a word-level operation inside a character-level interface.
The failure has a specific shape
If no phrase matches, the converter falls back to its character dictionary. In the shipped build every ambiguous character has a single pre-resolved default — not a list of candidates to choose between, just one answer, applied silently.
The defaults are 发 → 發, 干 → 幹, 后 → 後, 里 → 裏, 钟 → 鍾, 台 → 臺.
That is what happened to 干了一杯. 干杯 is in the phrase dictionary, but inserting 了 breaks the contiguous match, nothing else matches, and the character default 幹 fires. The converter never had a moment of uncertainty to report.
The same applies to 他的发. No phrase matches a bare 发 after 的, so out comes 他的發 where it should be 髮. Both are single expressions, and you can check either in about ten seconds.
It is also worth knowing that 面, 只, 系 and 松 have no entry at all in the character dictionary. A bare 面 with no surrounding phrase is left as 面. That is correct for “face” and wrong for “noodles”, and the tool cannot tell which you mean.
The document that actually governs this
The normative reference is the State Council's 通用规范汉字表, issued in 2013 as 国发〔2013〕23号, and specifically its 附表1 — the correspondence table between standard forms, traditional forms and variant forms. The older 简化字总表 is the one usually cited and is not the current instrument.
Two honest limits on that. The first is that 附表1 is published on the government's site as page images, not text. It cannot be searched, quoted precisely or diffed, which is a large part of why software relies on a community-maintained dictionary instead of the official standard. We did not extract row-level content from it and this guide does not quote any.
Second, Taiwan's Ministry of Education dictionaries are frequently cited as the authority here and are not one. They are monolingual traditional-Chinese dictionaries. They will tell you what 髮 means; they will not tell you which traditional character a simplified 发 corresponds to, because that question does not arise inside a traditional-only reference.
What to do about it
Convert whole sentences, never isolated characters. The phrase dictionary is the entire safety mechanism, and feeding it a bare character disables it.
Then read the output for the specific characters that merge. In practice that means checking 发, 干, 面, 后, 里, 只, 系, 钟, 松 and 台 by eye, because those are the ones where a wrong answer is grammatical, plausible and invisible.
Be especially careful with anything that splits a compound, like an inserted 了, 过 or 着, or a number or measure word. That is exactly what breaks a phrase match while leaving the sentence looking perfectly ordinary.
If you want to see the layered behaviour rather than read about it, our simplified–traditional converter runs the same phrase-first approach, and our Chinese converter covers the regional variants that the third dictionary handles.
Why round-tripping does not test anything
The obvious way to check a converter is to convert and convert back. It is the wrong test, for an interesting reason.
Traditional to simplified is the easy direction: 發 and 髮 both collapse to 发 with nothing to decide. So the return trip has to guess — and it usually guesses right, because the phrase dictionary works in both directions. 頭髮 → 头发 → 頭髮 survives intact. So do 乾杯, 幹活, 麵條, 出發 and 皇后.
What survives is the phrase. Send the bare character 髮 through and it comes home as 發, because with no phrase to match, the same default fires as before.
A successful round trip only tells you that the phrase dictionary contains your phrase. It does not prove the conversion was right, and it cannot detect failures in the cases the dictionary already covers. The test passes only where you did not need it.
Where this comes from, and what will date it
The dictionary counts, the pre-resolved defaults and the absent entries were read directly from the shipped dictionary files, not taken from documentation about them. The two failing conversions were reproduced against that same build, alongside eight control cases — 干杯, 头发, 干活, 树干, 面条, 里面, 皇后 and 以后 — all of which convert correctly. The controls are the point: two failures with no controls would be indistinguishable from a broken setup.
The governing standard is the 2013 通用规范汉字表. That the community dictionary, rather than the older 简化字总表, is the right thing to check against is stated by the dictionary project's own maintainers.
What will date this: the phrase dictionary grows, so any individual example may quietly start working. The structure will not change, because it cannot — the ambiguity is in the writing system, not in the software. If 干了一杯 is fixed by the time you read this, insert a different word and it will fail again.