中日韩文字:小票和后台单据为什么会排歪
一个汉字占两格。 几乎所有中文小票排版出问题,根子都在这一条 —— 程序按"字符个数"算宽度,而汉字实际占两个字符位。
80 毫米的纸一行能放 48 个英文字母,但只能放 24 个汉字。 中英混排的一行能放多少,得算,不能数。
这篇对你特别有用,就算你的小票是印当地语言的 —— 因为你的后台是中文的:采购单、盘点表、货架标签、厨房单,这些都是中文打印。
本文核对状态
宽度和换行规则是国际标准里写死的,稳定。打印机相关的部分要实测。
待核实 ——
TODO: verify
- 你要买的打印机有没有中文字库(很多不是在亚洲卖的机器根本没有)。
- 进入和退出中文模式的具体指令。
- 中文模式实际要求哪种编码(厂商文档经常写错)。
- 字库覆盖不覆盖你要用的字 —— 生僻姓氏、繁体字。
一、宽度:先解决这个
| 字符 | 占几格 |
|---|---|
| 汉字、假名、韩文 | 2 |
全角符号 :``(``1 |
2 |
中文标点 。``、``《 |
2 |
| 半角片假名 | 1 |
| 英文字母、数字 | 1 |
按字符个数算 = 算错,而且是往"超出"的方向错,所以症状是排版溢出、列对不齐。
一行到底能放几个字
| 纸宽 | 总列数 | 商品名列 | 能放几个汉字 |
|---|---|---|---|
| 80 毫米 | 48 | 约 35 | 17 个 |
| 58 毫米 | 32 | 约 19 | 9 个 |
58 毫米上商品名列只能放 9 个汉字 —— 基本什么都放不下。 所以 58 毫米不是"把 80 毫米缩小",得让商品名单独占一行。 这不是将就,是唯一可行的排法。
选系统时问:58 毫米的模板是不是单独做的?中文商品名会不会被截断?
二、换行:中文能在任意两个字之间断,但有禁忌
中文不需要空格就能换行,这让换行变容易,也让"随便断"看起来很业余。
规矩是:
- 句号、逗号、顿号、右括号、右引号不能出现在行首(
。``,``、``)``」) - 左括号、左引号不能出现在行尾(
(``「) - 数字和单位不要拆开
小票行数不多,简单处理就够:如果断行会把标点甩到下一行开头, 就把它前面那个字一起带下去。
三、打印机有没有中文字库 —— 这是最大的坑
大多数热敏打印机不认 UTF-8。中文比其他语言还多一层: 要先切到中文模式,打印机才会去查它内置的中文字库。
问题在于:很多打印机根本没有中文字库。
在欧美市场卖的机器尤其常见 —— 你发什么过去它都印方框或者空白。 这是"我这边测好好的、客户那边全是方框"最常见的原因。
所以选打印机时第一句话就问:这台机器有没有中文字库?
还有几件要实测(TODO: verify,厂商文档经常不准):
- 中文模式的指令是什么
- 中文模式要的是哪种编码(简体一般 GB18030 / GBK,繁体 Big5)
- 字库覆盖不覆盖你的字 —— 生僻姓氏、店名里的怪字, 正好是最不能出错的地方
简体和繁体不能互换。 一套简体的商品资料拿到港台市场, 有些字客人是看不懂的;而且转换不是一对一的, 一个简体字可能对应好几个繁体字,机器转会转错。 两个市场都做的话,存两个名字,别指望系统实时转。
四、最稳的办法:图形打印
和阿拉伯语、泰语一样,让软件把小票渲染成图片再打印, 字库、编码、模式切换的问题一次全绕开,印出来就是你看到的样子。
中文这边比其他语言更值得这么做,因为另一条路要赌打印机的字库覆盖, 而那个你既看不到也改不了。
代价是打印稍慢一点,日常用感觉不出来。
而且你的情况正好合适:后台中文单据 + 当地语言小票, 用图形打印就是一条路走通,不用维护两套。
五、验收清单
用你实际要买的打印机打,屏幕上看不出问题。
| 序号 | 打什么 | 合格标准 |
|---|---|---|
| 1 | 一个中文商品名 | 字印出来了,不是方框、不是空白 |
| 2 | 中文夹英文品牌的一行 | 列的位置对 |
| 3 | 三行长短不一的商品 | 金额小数点上下对齐 |
| 4 | 一个长到要换行的名字 | 断行没把 。``, 甩到行首 |
| 5 | 你自己店名里的字、生僻姓氏 | 印得出来 |
| 6 | 繁体字(如果做港台市场) | 正确 |
| 7 | 80 毫米和 58 毫米各一张 | 都能看,58 毫米是重排不是压扁 |
| 8 | 重打一张旧单 | 和原来一模一样 |
第 5 条特别要试 —— 客人的店名、老板的姓,打不出来最尴尬。
六、哪些地方会用到
几乎所有部署都用得上,因为后台是中文的。
直接印给顾客的场景:马来西亚(中文在当地商业场合是真的在用), 以及所有中餐馆的厨房单 —— 厨房看中文、前厅说当地话, 这是这份资料里反复出现的配置,见各国的开餐厅章节。
日文、韩文除了本国市场,海外的日料店、韩餐厅也会用到。
七、挑系统时该问清楚的问题
- 中文的宽度你们是怎么算的? 一个汉字算一格还是两格?
- 58 毫米的模板是单独做的吗?中文商品名会不会被截断或者排歪?
- 中文小票是靠打印机字库,还是软件渲染成图片打印?
- 我要买的这台打印机有中文字库吗? 用它现场打一张给我看。
- 我店名里的字 [具体写出来] 能不能打出来?
- 繁体和简体能不能存两个名字?(做港台市场才需要)
- 换行会不会把标点甩到行首?
- 后台中文单据(采购单、盘点表、货架标签)和当地语言小票, 是同一套打印方式吗?
第 1 条和第 4 条答不上来的,基本没认真做过中文。
由秘奥软件(MISAll)团队维护。最后更新:2026-08