含阿拉伯语的二维码(以及为什么有些扫码器显示乱码)
制作能正确解码的阿拉伯语二维码,用回扫来验证,并选择仍然清晰可读的尺寸、颜色和 logo。
为什么需要这样做
在二维码里放阿拉伯语文字是很常见的需求:菜单上的一句说明、Wi-Fi 名称、名片、招牌上的短消息。但这也是二维码最容易悄悄出错的场景。二维码看起来完美无缺,扫描时也毫无异常,可手机上本该出现阿拉伯字母的地方却显示成一个“E”之类的字符。
原因在于文字如何变成字节。二维码存储的是字节而不是字母,所以生成器必须先把你的文字转换成字节。阿拉伯字母需要 UTF-8 编码,每个字母占两个字节。有些编码器仍在使用 Latin-1,它每个字符只保留一个字节,放不下的部分直接被截断。于是阿拉伯字母丢掉了一半,变成毫不相干的字符,通常是普通的拉丁字符。二维码本身有效,只是里面的数据是错的。不同的扫码应用猜测方式不同,所以这个故障在不同手机上看起来像是随机的。
本指南介绍如何制作真正携带 UTF-8 的二维码,如何通过回扫来确认,以及如何设定尺寸让它持续可用。
具体做法,使用该工具
二维码生成器会在编码之前把你输入的文字转换成 UTF-8 字节,因此阿拉伯字母不会损坏。二维码与条码识别可以读取二维码,让你核对它实际包含的内容。
- 选择要编码的内容。 选择链接、文本、WiFi 或联系人。写阿拉伯语的话,通常选文本或联系人。在输入框里输入阿拉伯语;预览会随着输入实时重绘,**已编码:**那一行会显示即将写入二维码的内容。
- 谨慎设置样式。 前景色和背景色的取色器在预览下方。保持深色码、浅色底。如果两种颜色太接近,工具会提示:“对比度过低可能无法可靠扫描。”
- 需要时打开“高级”。 在这里可以设置点状样式、边角样式、纠错级别(L、M、Q 或 H)、中心 logo,以及导出尺寸 512、1024 或 2048 px。
- 保存。 点按 PNG 或 SVG。PNG 适合屏幕和文档;SVG 在任何打印尺寸下都保持清晰。
- 回扫验证。 打开二维码与条码识别,点按打开摄像头,对准屏幕上的二维码,或者用上传图片或粘贴图片处理刚保存的文件。结果卡片会显示解码出的文字,把它与你输入的内容逐字对照。
- 然后用你在意的那部手机再扫一次。 识别工具在你的浏览器里运行,而你的客户用的是自己手机的相机应用。用真实手机测试,是对真实路径唯一的检验。
需要注意什么
用解码来验证,不要靠眼睛看。 一个渲染得很干净的二维码并不能证明它的内容正确,因为编码错误的码和正确的码看起来一模一样。务必回扫并对照文字。这是唯一能发现编码故障的步骤。
尺寸与静区。 生成器以 512、1024 或 2048 px 导出,默认 1024。导出尺寸更大,打印出来更锐利,但并不会让打印后的二维码更容易扫描。真正重要的是打印尺寸与扫描距离的比例。粗略的经验是,扫描距离约为二维码宽度的十倍,所以从一臂远的距离扫描,二维码需要有几厘米宽。工具里没有静区设置,静区就是读码器在图案四周需要的空白边。二维码标准要求约四个模块宽。请在你的版面中留出清晰的边距,千万不要把图片紧贴方块裁剪。
颜色对比度。 当对比度低于 3:1 时,工具会标记这组颜色。请把它当作下限而不是目标。深色前景配浅色背景最可靠,而反色码,即浅色码配深色底,并非所有读码器都支持。
logo 与纠错。 四个纠错级别大约可以恢复 7%(L)、15%(M)、25%(Q)和 30%(H)的受损数据。默认是 M。中心 logo 会遮住一部分图案,所以工具会自动把纠错提高到 H,并在 logo 存在期间锁定级别按钮。更高的纠错需要更多模块,因此在相同的打印尺寸下每个模块会变小。如果看到“在当前纠错级别下内容过长,无法编码”,请降低级别或缩短文字。
静态意味着不可更改。 内容已经写进图片本身。如果某个电话号码或某个词写错了,就重新生成一个新码,并替换所有已打印的副本。
Wi-Fi 二维码里的密码是明文。 任何扫描这个码的人都能读到密码,所以只在你愿意大声说出密码的地方展示它。
常见问题
为什么我的阿拉伯语二维码能扫出来,却显示奇怪的字符?
很可能是生成器用了 Latin-1 编码而不是 UTF-8,每个阿拉伯字母只保留了低位字节。二维码能读,但里面的字节是错的。请改用采用 UTF-8 编码的生成器重新制作,然后回扫确认文字。
加 logo 会让二维码无法扫描吗?
只要 logo 保持较小、纠错级别够高就不会。每当你添加中心 logo,工具都会把纠错提高到 H。即便如此,打印前也请至少用一部真实手机扫描最终的二维码,因为 logo 会占用一部分安全余量。
生成器或识别工具会上传我的文字吗?
不会。二维码在你的浏览器中绘制,识别工具在你的设备上处理摄像头画面或图片。此前的扫描记录保存在你的设备上,位于最近扫描下,点按全部清除即可删除。在某些浏览器上,首次使用时识别工具会下载一个约 1 MB 的小型读取组件。