在俄语区开店:西里尔字母小票会遇到什么问题
先说结论:俄文、哈萨克文这类西里尔字母,排版上比阿拉伯语、泰文省事得多 —— 不用从右往左排,不用连笔,也不用管符号叠层。它真正的麻烦不在打印上,在数据里, 而且两个坑里有一个,不专门去查永远发现不了。
两个坑:
一个是乱码。俄语世界有两套互不兼容的老字符集同时在用, 打印机可能是这套、软件可能是那套,配错了整张小票是乱的。 这个坑至少是明的 —— 一眼能看出来,后面教你怎么看出是哪里错了。
另一个是暗的:西里尔字母里有十几个字母,和英文字母长得一模一样, 但电脑当成两个完全不同的字。店员录商品名的时候中英文键盘一切换, 录出来的名字看着一点问题都没有,但搜不到、对不上、盘点会多出一条。 这个坑不打样张,不看数据,永远发现不了。
如果你在俄罗斯、哈萨克斯坦、吉尔吉斯斯坦、蒙古、乌克兰、塞尔维亚这些地方开店, 这篇值得看完。
本文核对状态
文字编码和排序规则是国际标准里写死的,这部分比较稳定, 里面的字符编号都是照 Unicode 标准数据库核对过的。 和打印机型号有关的部分各家不一样,必须拿你实际要买的机器去试。
待核实清单 ——
TODO: verify
- 你要买的那台打印机,俄文走的是
CP866还是Windows-1251这一套, 开机默认是哪个。这一条最关键,必须打样确认,见第三节。- 打印机自带字库有没有西里尔字母。
- 打印机会不会把俄文字母印成两倍宽。 从国内带的机器有这个风险, 见第五节。
- 卢布符号
₽(以及坚戈₸、格里夫纳₴、索姆⃀、图格里克₮) 打印机印不印得出来。- 当地是不是强制要用税控收银机。 是的话,小票格式和编码由那台机器说了算, 不是你的软件说了算。这份资料没有任何一个西里尔字母国家的国家篇, 税务这块完全没整理过,必须另外问当地会计。
- 当地小票上货币符号放哪、小数点用逗号还是句点、千位怎么分隔。
- 哈萨克斯坦改用拉丁字母这件事现在进行到哪一步了。
- 保加利亚换欧元之后的标价规则 —— 见第七节,几个来源说法不一致。
一、好消息:这类文字排版不难
如果你听说过阿拉伯语、泰文那些麻烦事,可以放心,西里尔字母一样都没有:
| 别的语言的麻烦 | 西里尔字母 |
|---|---|
| 从右往左排 | 没有,和中文英文一样从左往右 |
| 字母连笔,位置不同长得不一样 | 没有,每个字母一个样 |
| 符号叠三四层,容易被切掉 | 没有 |
| 词之间不空格,换行要专门算法 | 没有,和英文一样按空格断行 |
| 一个字占两格 | 正常是一格 —— 但有个例外,见第五节 |
所以真正要盯的只有下面几件事。
二、最阴的坑:长得一模一样的字母
俄文里有一批字母,和英文字母看上去完全一样,但在电脑里是两个不同的字:
| 俄文字母 | 英文字母 | 俄文字母 | 英文字母 | |
|---|---|---|---|---|
А |
A |
а |
a |
|
В |
B |
е |
e |
|
Е |
E |
о |
o |
|
К |
K |
р |
p |
|
М |
M |
с |
c |
|
Н |
H |
у |
y |
|
О |
O |
х |
x |
|
Р |
P |
|||
С |
C |
|||
Т |
T |
|||
У |
Y |
|||
Х |
X |
注意 Н 对应的是英文的 H,Р 对应的是 P,С 对应的是 C,У 对应的是 Y。
形状一样,读音和编码都不一样。
这会造成什么
店员录商品的时候,俄文键盘和英文键盘是同一个物理按键,切换一下就变。 录完谁也看不出问题,然后:
- 搜不到货。 商品名录的时候用了一个英文字母,收银时用俄文键盘搜,搜不出来。 店员当场以为这个商品没录,又新建了一条。
- 盘点对不上。 同一个商品变成两条记录,库存分成两半,两边都不对。
- 商品列表里出现两条一模一样的名字,看上去完全相同,怎么删都觉得删错。
- 商品编码最惨。 编码
С100里那个С如果是俄文字母, 别人照着标签用英文键盘打,永远打不出来,而标签上看着一字不差。 - 导给会计的报表对不上。 会计在 Excel 里查找匹配不上, 第一反应是你导出的数据有问题。
你自己怎么验
验收的时候当着供应商的面做这个测试:
- 让他们在系统里录一个俄文商品名。
- 你再录一个,名字故意其中一个字母用英文键盘打(比如把
С打成C)。 - 看系统的反应: - ✅ 系统提示"疑似重复商品"或者直接拦下来 → 做过俄语区的项目 - ❌ 系统安安静静新建了第二条 → 这个坑将来天天踩
你自己怎么防
这三条写进店里的规矩,比什么系统功能都管用:
- 商品编码、货号只用数字。 不用字母,这个坑一半就没了。 如果一定要用字母,规定只能用英文键盘打,并且让系统禁止编码里出现俄文字母。
- 商品名以当地店员录入为准,你不要自己拼。
- 定期让系统跑一遍"同名重复商品"检查。 这个要在买之前就问清楚有没有。
发现重复了不要让系统自动合并。 那两条记录可能已经各自有几个月的进销存了, 自动合并会把账搅乱。要的是列出来、人工看、手工处理。
三、乱码怎么看:看到什么等于哪里错了
俄文乱码是能从样张上看出病因的,这一点比其他语言好办。 打一张样张,对照下面这张表:
| 你看到什么 | 说明什么 | 好不好修 |
|---|---|---|
大写字母的位置全是横线、竖线、方块这种"表格线",小写是俄文但不对,中间夹着 № ¤ ■ √ ° |
软件按 Windows-1251 发,打印机按 CP866 收。最常见的一种 |
好修,改一边的设置 |
大写位置变成一堆引号、破折号、€、‰ |
反过来了:软件按 CP866 发,打印机按 Windows-1251 收 |
好修 |
每个俄文字母变成两个奇怪的字符,很多以 Р、С、Ð 开头 |
软件按 UTF-8 发,打印机按老字符集收 | 好修 |
一个字母一个 ? 或者一个空格,英文数字正常 |
文字在软件那一端就已经被丢掉了,还没到打印机 | 要改软件,改打印机没用 |
| 一个字母一个方框,间距很整齐 | 打印机没有俄文字库 | 换机器,或者改走图形打印 |
| 俄文是对的,但哈萨克语、乌克兰语特有的那几个字母不对 | 大方向对了,用的子版本不对 | 好修 |
| 字都对,就是每个字宽了一倍 | 不是乱码,是字库问题,见第五节 | 见第五节 |
这张表里最要紧的是分清两种"看起来都坏了"的情况:
- 一个字母一个
?—— 文字已经被销毁了,打印机怎么设都救不回来, 必须改软件那一端。 - 一个字母一个方框 —— 文字是完好送到的,只是打印机画不出来, 换字库或者走图形打印就行。
这两种长得一样破,原因和修法完全不同。跟供应商反馈的时候说清楚是哪一种, 能省掉好几个来回。
四、Ё 和 Й:搜不到货的另外两个原因
Ё 这个字母,俄国人自己经常写成 Е。 同一个商品,
供应商目录里写 ёлка,你店里录成 елка,两边都算对,但互相搜不到。
要问供应商:搜索的时候能不能把 ё 和 е 当成一回事?
(注意是搜索时,不是把数据改掉。)
Й 上面那个小弯钩容易掉。 这个字母在电脑里有两种存法,
一种是整体一个字,一种是「И + 一个弯钩」。第二种走老字符集打印的时候,
弯钩会被丢掉,Й 变成 И。
麻烦在哪:Йогурт(酸奶)变成 Иогурт,它还是一个像模像样的俄文词,
不是方框也不是问号,你完全看不出来,只有当地人念一遍才知道不对。
验收的时候样张上一定要有一个带 Й 的词,看那个小弯钩在不在。
五、从国内带打印机的,看这一节
这一条中文版专门写,因为它主要发生在从中国买机器的店主身上。
国际标准里,俄文的 33 个字母被归成一类叫"宽度不确定"的字符 —— 在西文字库里是一格,在中文字库里是两格。 标准原话是这类字符"有时宽有时窄,光看字符本身定不了"。
所以:一台为中国市场做的打印机,字库是中文的, 它可能把俄文字母按中文一样印成两倍宽。
结果是:
- 编码完全正确,字也认得出来,但一行只能放一半的字, 排版全乱,金额对不齐,商品名被截断。
- 更怪的是:这个"变宽"只发生在俄文的那 33 个字母上。
乌克兰语的
і、ї,哈萨克语的ә、ң这些字母不在那一类里,还是一格。 所以会出现同一个词里前半截宽、后半截窄的情况。 看到这种,不用怀疑编码,就是字库问题。
怎么验: 让供应商用你实际要买的那台打印机打一张样张, 上面要有三行长度不同的俄文商品名加金额。看两件事:
- 小数点是不是上下对齐成一条竖线;
- 一行大概能放多少个俄文字母 —— 80mm 纸正常能放 48 个左右字符, 如果只放得下二十几个,就是被当两格了。
俄文商品名本来就长,而且不像中文那样一个字顶好几个字母的信息量, 所以 58mm 纸基本不够用。建议直接上 80mm,商品名单独一行、金额另起一行。
六、卢布符号打不出来
俄罗斯卢布的符号是 ₽,国际代码 RUB。
这个符号有个硬问题:它是 2014 年才进国际标准的, 而第三节里说的那几套老字符集全都是那之前定下来的 —— 所以里面根本没有这个符号, 不是"可能没有",是"按定义就不可能有"。
同类的还有:哈萨克斯坦坚戈 ₸、乌克兰格里夫纳 ₴、蒙古图格里克 ₮、
吉尔吉斯斯坦索姆 ⃀(这个更新,几乎可以肯定打不出来)。
两个办法,问供应商能不能做:
- 印国际代码:
RUB、KZT、UAH、KGS、MNT。 价格位置出现三个字母,比出现一个黑方块强得多。 - 印当地习惯的缩写:俄语里
руб.这种写法用了很多年, 而且老字符集里都打得出来,当地人也认。
TODO: verify 到底印哪个、符号放数字前面还是后面 —— 问当地会计或同行,
别让软件按中国习惯默认。
还有金额格式: 俄语、乌克兰语、哈萨克语的习惯是
小数点用逗号、千位用空格 —— 1 234,56。
这和国内 1,234.56 正好反过来。买之前问清楚这个能不能设。
七、几件和钱有关的、正在变的事
保加利亚已经换成欧元了。 2026 年 1 月 1 日起保加利亚采用欧元, 固定汇率 1 欧元 = 1.95583 列弗,列弗到 2026 年 2 月 1 日停止流通。 换币期间要求商品同时标两种货币的价格,这个双标价要求 按二手来源的说法在 2026 年 8 月 8 日结束,之后只能标欧元、 列弗只能作参考。注意:有的来源给的结束日期不一样, 这几条全都是二手消息,没有向保加利亚官方核实过。 在保加利亚开店的,这条一定要自己确认。
哈萨克斯坦在从西里尔字母改成拉丁字母,时间表改过好几次。 对开店的影响不看具体日期:未来几年数据里两种字母会同时存在, 同一个商品可能有两个名字。选系统的时候要问: 一个商品能不能存两个当地语言的名字,搜索能不能两种都搜得到。
乌兹别克斯坦官方用拉丁字母,但看得懂西里尔字母的人还很多;
蒙古用西里尔字母,还多两个字母 Ө、Ү,很多字符集里没有。
八、哈萨克语、蒙古语要特别问一句
上面说的 Windows-1251 这套字符集,只够用来打斯拉夫语系那几种:
俄语、乌克兰语、白俄罗斯语、保加利亚语、塞尔维亚语、马其顿语。
哈萨克语、蒙古语、塔吉克语、乌兹别克语(西里尔写法)都不够。
它们各自还有几个特有字母 —— 哈萨克语的 ә ғ қ ң ө ұ ү һ і、
蒙古语的 ө ү —— 这些字母不在里面。
所以在哈萨克斯坦、蒙古、吉尔吉斯斯坦开店的, 不能只问"支不支持俄文",要问"支不支持哈萨克文/蒙古文", 这是两个问题。答案通常是要走图形打印(把小票当成一张图片打), 这个方式慢一点,但什么字都能印。
验收样张上一定要有一个带本地特有字母的真实商品名,不能只用俄文商品试。
九、语言怎么配
在俄语区开店的华人商户,通常三种语言同时跑,这三个必须能分开设:
| 用在哪 | 设成什么 | 谁看 |
|---|---|---|
| 收银台界面 | 俄语(或当地语言) | 本地店员 |
| 后台、报表、进货单 | 中文 | 你自己 |
| 小票、给顾客的单据 | 俄语(或当地语言) | 顾客 |
商品要能存两个名字:一个当地语言的印在小票和货架标签上, 一个中文的你自己在后台认。你不可能靠认俄文来盘点。
在哈萨克斯坦这种正在改字母的地方,可能需要三个名字 (中文、西里尔、拉丁),买之前就要问清楚。
十、挑系统时该问清楚的问题
这几条直接拿去问供应商,答不上来的就是没做过:
-
我要买的这台打印机,俄文走的是
CP866还是Windows-1251?你们试过没有? —— 这是第一个问题。俄语区这两套都在用,没有哪个是"默认安全"的, 答不上来的基本没做过。 -
能不能先打一张样张给我?上面要有:一个俄文商品名、一个带英文品牌的商品名、 一个带
Й的词、一个带Ё的词、三行不同长度的商品和金额、 一个₽符号、一个-10%的折扣行。 —— 拿到按第三、四、五节自己对照着验。 -
(在哈萨克斯坦、蒙古、吉尔吉斯斯坦开店的) 哈萨克文(蒙古文)的特有字母能不能打?样张上加一个真实的本地商品名。
-
商品名录错脚本(俄文字母混英文字母)系统会不会提示? 有没有"疑似重复商品"检查? —— 当场用第二节的办法试。
-
商品编码能不能限制只用数字或只用英文字母?
-
商品列表按名称排序,
Ё开头的商品排在哪? —— 正确答案是排在Е后面。排在最前面或者最后面, 说明排序是按编码顺序做的,整个商品列表的顺序都不对。 -
₽印不出来的时候能改成印RUB或者руб.吗?是配置项还是要改程序? 金额能不能设成1 234,56这种格式? -
一个商品能不能存中文名和当地语言名两个名字?收银台、后台、小票三个语言能不能分开设?
-
80mm 和 58mm 两种纸各打一张。 —— 俄文商品名长,窄纸最容易露馅。
-
当地要不要用税控收银机?你们的系统和那台机器怎么对接? —— 这一条你自己一定要向当地会计或同行再确认一次,别只听软件供应商的。
最后提醒一句:这份资料目前没有俄罗斯、哈萨克斯坦这些国家的国家篇, 税率、发票要求、收银机备案、小票必印内容这些一项都还没整理。 这篇只讲文字、编码和打印,税务和单据合规必须另外问当地会计,别拿这篇当依据。
由秘奥软件(MISAll)团队维护。最后更新:2026-08