越南文:是拉丁字母,但比拉丁字母难得多

越南文用的是拉丁字母,可它一个元音上面能叠两个符号 —— 一个管音色,一个管声调,所以超出英文字母的字符有一百三十多个。

关键一点:没有任何单字节字符集能完整覆盖它,包括那个名义上就是为越南文做的。

出错的严重程度介于两者之间:比重音符号丢失明显(那个还能读), 比阿拉伯语乱码隐蔽(那个一眼看得出)。 越南文小票掉了声调符号,不懂的人看着还像越南文,越南人读出来是另一个词。

本文核对状态

文字规则稳定,打印机相关的要实测。

待核实 —— TODO: verify

  1. 打印机支不支持越南文字符集,编号多少。
  2. 字库覆盖不覆盖完整的字符集。
  3. 供应商给的商品资料是不是老编码格式。

一、一个元音上叠两个符号

例子
基础元音 a e i o u y
音色符号 â ă ê ô ơ ư
声调符号 五个声调
两个都有 ế ộ ữ ằ ợ

另外 đ一个独立的字母,不是"带横杠的 d",不能当成 d 处理。

二、为什么选对字符集也不够 —— 这是核心

大多数打印机不认 UTF-8,要走单字节字符集。越南文的候选:

编码 问题
CP1258 名义上的越南文字符集。覆盖不全 —— 有些字它是拆成"基础字母 + 声调符号"两部分存的,转换时声调就丢了。
TCVN3(ABC) 老编码,大小写还分成两套字体。老资料里常见。
VNI 另一套老编码,拆法又不一样。

所以「我们设了 CP1258」不等于越南文能正确打印。 设对了照样可能掉声调。

这一条要跟供应商说清楚:别只告诉我设了哪个字符集,打一张给我看。

三、供应商给的资料是重灾区

越南做了很多年的供应商,给的商品表格经常是 TCVN3 或者 VNI 老编码的, 不是 Unicode。导进系统会变成乱码,或者更糟 —— 变成看起来像那么回事、其实是错的文字

处理办法:

商品资料一旦导错,后面价格、库存都挂上去了,再回头改代价很大。

选系统时问:我供应商给的这个 Excel,你们导一遍给我看结果。

四、图形打印

越南文建议直接用图形打印(软件渲染成图片再打), 因为另一条路要赌字符集覆盖,而那个已经知道是覆盖不全的

和泰文不一样的是:越南文的词之间是有空格的,换行按空格断就对, 不需要专门的断词算法。只要别从词中间断就行。

五、宽度、排序、货币符号

宽度:每个字符占一格,好算。

长度:越南文词短但多,商品名换行比中文英文都频繁。 58 毫米的小票要留出商品名占两行的余地(见越南那篇)。

排序:越南文字母表里 đ 排在 d 后面,带音色符号的元音排在基础元音后面。 按字符编码排序排不出这个顺序。 商品列表和搜索要用越南文排序规则, 不然店员找东西费劲 —— 和泰文那篇是同一个道理。

货币符号 很多打印机字库里没有。验收时确认能打出来, 打不出来就印 VND别印成方框

另外越南盾千位用点、不带小数,这是格式问题,见越南那篇 —— 但它和声调符号一起,构成"一张越南小票看起来对不对"的两半。

六、验收清单

用实际要买的打印机打,找越南人看

序号 打什么 合格标准
1 Cà phê sữa đá 每个声调和音色符号都在
2 Nguyễn 上叠的符号正确
3 đ 的词 印出来是 đ 不是 d
4 Tổng cộng: 1.234.567 ₫ 符号对、点号还在当千位分隔、 印得出来
5 从供应商表格导入的商品名 和第 1 条一样正常
6 三行长短不一的商品 金额对齐
7 商品列表排序 đ 排在 d 后面
8 重打一张旧单 和原来一模一样

第 5 条最关键 —— 这是唯一一条用「不是你自己打出来的数据」做的测试, 也是最容易出问题的那条。

七、挑系统时该问清楚的问题

  1. 越南文小票是靠字符集还是图形打印? 用我要买的打印机打一张给我看。
  2. 我供应商这个 Excel 导进去会不会乱码? 现场导一遍。
  3. 商品名太长换行会不会从词中间断?
  4. 商品列表和搜索用的是越南文排序吗?
  5. 能不能打印?打不出来会退回印 VND 吗?
  6. 58 毫米小票上,长的越南文商品名怎么排?
  7. 商品能不能存中文名和越南文名两个名称?

第 1、2 条一定要当场看演示,口头承诺没用。


由秘奥软件(MISAll)团队维护。最后更新:2026-08