If you've ever looked up the stroke count of a Chinese character, you've probably hit this puzzle: one encyclopedia says 迎 is 7 strokes, some online tool says 8, and the stroke lookup in your phone's input method gives yet another number. So you start to wonder — who is wrong?
The answer is that for a given set of glyph forms, the stroke count is an objective fact with no room for dispute. The problem lies in the glyph forms themselves. Different data sources use different glyph standards, so they naturally count to different results.
Starting with 迎
The right-hand part of 迎 is 卬 and the left is the walking radical 辶. The disagreement is over that 辶.
- Mainland standard glyph: 辶 is 3 strokes (dot, horizontal-turning-hook, flat right-falling stroke). So 迎 = 3 + 4 = 7 strokes.
- Traditional glyph (the Unihan convention): 辶 is counted in the full form of 辵, traditionally 4 strokes. So 迎 = 4 + 4 = 8 strokes.
One character, one stroke apart. And the kTotalStrokes field in Unihan, Unicode's official CJK database, records exactly 8. Many tools and many programs read that field directly, so they output 8.
It isn't a bug — Unihan's field definition is not wrong; it simply follows a different glyph convention. But for a Chinese user, that result doesn't match what the textbook taught.
The root of the disagreement: five radical families
When building our tool we compared all 6,763 GB2312 characters one by one and found 258 characters (3.81%) with a stroke-count discrepancy. The pattern is remarkably concentrated, falling almost entirely on these radical families:
| Radical | Mainland standard | Traditional / Unihan | Difference |
|---|---|---|---|
| 辶 (walk) | 3 | 4 (as 辵) | −1 |
| 廴 (stride) | 2 | 3 (full form) | −1 |
| 礻 (altar) | 4 | 5 (as 示) | −1 |
| 艹 (grass) | 3 | 4 (as 艸) | −1 / −2 |
| 月 (flesh) | 4 | 6 (as 肉) | −2 |
The distribution we measured is: 249 characters one stroke fewer, 8 characters two strokes fewer, and just 1 character one stroke more. It leans overwhelmingly to one side — in the great majority of cases Unihan's number is larger, because it restores these radicals to their full written form.
The 8 characters that differ by two strokes
These are the easiest to mix up and worth listing separately:
- 营: Unihan 13 → mainland standard 11
- 都: Unihan 12 → mainland standard 10
- 著: Unihan 13 → mainland standard 11
- 薯: Unihan 18 → mainland standard 16
- 蓬: Unihan 15 → mainland standard 13
- 延: Unihan 8 → mainland standard 6
- 筵: Unihan 14 → mainland standard 12
- 甍: Unihan 16 → mainland standard 14
The pattern is plain: 营, 著, 薯, 蓬 and 甍 all carry the grass radical, which is 3 strokes in the mainland standard (horizontal, vertical, vertical) while Unihan counts the full form 艸 as 4 — and combined with other structural differences in these characters, that adds up to a gap of two. 延 and 筵 carry the stride radical, by the same logic.
The single "reverse" character
Among the 258 discrepancies, exactly one has Unihan recording fewer strokes than the mainland standard: 致. Unihan gives 9 strokes; the mainland standard is 10.
The cause is that the right-hand part of 致 is written differently under different glyph standards, which changes how the strokes are broken down. This lone case makes the point precisely: stroke differences are not "add or subtract a constant" — they are a character-by-character result derived from the glyph form and cannot be corrected by applying a formula.
So which one should you trust?
It depends on what you're doing:
- Language teaching, exams, dictionaries, calligraphy: use the mainland standard glyph forms (the modern standard stroke-order specification and the table of standard characters). That's the basis of the domestic education system, and what marking follows.
- Name stroke counts and traditional five-grid name analysis: traditional naming practice uses the Kangxi dictionary convention, which differs from both of the above — it counts traditional glyph forms. So 迎 might show as 11 strokes in naming software (per a variant or Kangxi form). That's a third standard.
- Programming, fonts, typesetting: for data validation or statistics, any convention works, but be internally consistent and don't mix them.
The worst case is taking Unihan data into a domestic language-teaching context. The discrepancy rate here is about 3.81%, meaning one character in every 26 has the wrong number — used for marking homework, it will keep producing errors.
Why so many tools get it wrong
The reason is practical: Unihan is a ready-made, free and well-structured source of CJK data. It's maintained by the Unicode Consortium with complete fields (readings, definitions, radicals, stroke counts, encodings), and it works the moment you download it. Publicly accessible, well-structured stroke-by-stroke data for the mainland standard glyph forms is much scarcer.
So a great many tools — including some well-known sites — read Unihan's kTotalStrokes directly. The source isn't labelled, and users seeing an inflated number have no way to know why.
We fell into this trap ourselves while building the Chinese stroke lookup: the first version read Unihan, tested 迎 and got 8, which didn't match the textbook. Only after switching to a source derived stroke by stroke from the standard glyph forms did all 258 characters get corrected.
How to judge quickly yourself
For a character you're unsure of, three steps:
- First, break out the radical. Check whether it contains 辶, 廴, 礻, 艹 or 月 (the flesh moon). If so, the stroke count very likely has a convention-dependent answer.
- Second, compare two sources. If two sources differ by 1 or 2 strokes, it's almost certainly a convention difference rather than a data error.
- Third, pick the convention by purpose. Mainland standard for teaching and exams, Kangxi for naming, and whatever you like internally in software as long as it's consistent.
To save effort, just use a tool — the stroke lookup uses the mainland standard glyph convention and also supports reverse lookup by stroke count or radical. "Find every 10-stroke character with the mouth radical" would take ages by hand or through a dictionary; a tool returns it in a second.
A related note: radicals have the same problem
Beyond stroke counts, radical assignment also has merging differences. The same character may fall under different radicals in different dictionaries. This is largely the distinction between classifying by meaning and classifying by shape — 相, for instance, goes under 目 either way, so the two agree, but some characters diverge.
The common case is a component that has been simplified or transformed: by shape it looks like one thing, by original meaning it's another. If you can't find a character by its radical, try a different one, or use a tool that supports several search methods.
In one sentence
There is no single answer to a character's stroke count — only an answer under a particular glyph standard. 迎 is both 7 strokes (mainland standard) and 8 strokes (the traditional Unihan convention), and neither is wrong. Knowing which standard you're using matters far more than memorising a particular number.