Parser reliability
CJK and Emoji Width in Plain-Text Tables
Written and reviewed by the md2text maintainer. Parser-specific guidance is checked against the automated regression suite.
Plain-text table alignment depends on visible width, not just character count. That distinction matters when a table contains Chinese, Japanese, Korean, emoji, or Unicode box-drawing characters. A string can contain a small number of characters but occupy more columns in a terminal.
If a converter pads cells by counting code units instead of visible columns, the result will look uneven. Documentation authors do not need to know every Unicode rule, but a few practical habits help.
Character count is not display width
This table has short values:
| Area | Status |
|---|---|
| 文档 | ✅ Ready |
| API | ⚠️ Review |
The visible width of 文档 is usually wider than two ASCII letters. Emoji can also occupy more than one terminal column. A converter should account for that when aligning cells.
Why terminals differ
Terminals, editors, browsers, and chat tools may not agree perfectly about width. Font choice, operating system, emoji rendering, and East Asian width rules all play a role. That is why a table can look aligned in one place and slightly off in another.
Use these habits when the destination matters:
| Content type | Risk | Practical habit |
|---|---|---|
| CJK labels | Wider than ASCII | Keep labels short |
| Emoji status | Platform-dependent width | Pair with text |
| Box drawing | Usually stable | Test in target terminal |
| Mixed scripts | Harder to scan | Avoid crowded columns |
The goal is not perfect control over every renderer. The goal is to avoid tables that are fragile before they are pasted.
Pair emoji with words
Emoji alone can be ambiguous:
| Service | Status |
|---|---|
| Docs | ✅ |
| Billing | ⚠️ |
| API | ❌ |
Prefer:
| Service | Status |
|---|---|
| Docs | ✅ Ready |
| Billing | ⚠️ Review |
| API | ❌ Blocked |
The text label keeps the meaning clear even if emoji display changes.
Keep multilingual tables narrow
When a table mixes English and CJK text, avoid many columns:
| Area | Owner | Status |
|---|---|---|
| 文档 | Lee | ✅ Ready |
| 支付 | Chen | ⚠️ Review |
This is usually manageable. A five-column version with long descriptions is much more likely to wrap. If you need multilingual descriptions, put them below the table.
Unicode box output and CJK
Unicode box drawing can pair nicely with CJK text in modern terminals:
┌──────┬──────────┐
│ Area │ Status │
├──────┼──────────┤
│ 文档 │ ✅ Ready │
└──────┴──────────┘
For older tools, ASCII grid may be safer:
+------+----------+
| Area | Status |
+------+----------+
| 文档 | ✅ Ready |
+------+----------+
Choose based on the destination. Modern terminal docs can use Unicode. Source comments and legacy systems are usually better with ASCII.
A simple testing workflow
Before sending a multilingual table:
- Convert the Markdown table.
- Check the maximum visible line width.
- Paste into the real destination, not only a browser preview.
- If columns drift, try ASCII or Simple text.
- If lines wrap, split the table or shorten cells.
CJK and emoji support should not prevent readable plain-text tables. It just requires treating visible width as a first-class part of the conversion.
Convert your own table
Paste a Markdown table into the converter and choose ASCII grid, Unicode box, or Simple text output. Conversion runs locally in your browser.
Convert a Markdown table