café 怎么变成 cafe?去除重音符号的规则与例外
同一个名字,José 和 Jose 在系统里常被当成两个人。去掉重音符号能让它们对上,但也会丢掉原文的拼写信息,所以先弄清哪些字符会变、哪些不会。
什么时候需要去掉重音
导入旧系统时,字段长度限制、字符集限制或者简单的输入校验,都可能让 café 变成 caf?或者直接被拒绝。先把文本还原成基本拉丁字母,往往是最省事的绕过办法。
匹配姓名也常见:表格里写 José,另一张表写 Jose,用 Excel 或数据库查询时对不上。搜索关键词、网址 slug、用户名和邮箱前缀的归一化,也是同一类需求。
- 导入不接受重音字符的旧系统
- 比对同一姓名的不同拼写
- 生成网址 slug、用户名、邮箱前缀
- 统一搜索关键词的写法
原理:拆开字母,再删掉记号
带重音的字母在 Unicode 里通常有两种表示:一个合成字符,或者一个基本字母加一个组合记号。工具先把文本做规范分解,再删掉 U+0300 到 U+036F 这个区间里的组合记号,于是 é 变成 e,ñ 变成 n,ü 变成 u,ç 变成 c,Ā 变成 A。
有些字符不会被处理,因为它们不是「基本字母 + 记号」的结构:德语 ß、丹麦语 ø、波兰语 ł、越南语 đ、以及 æ 和 œ 都保持原样。汉字、假名等非拉丁文字不在这套规则里,处理后仍然可读。
- é、ñ、ü、ç、Ā 会还原成基本字母
- ß、ø、ł、đ、æ、œ 保持不变
- 汉字与假名不受影响
- 只处理组合记号 U+0300–U+036F
不可逆,也不是音译
重音信息在删除时已经丢失,无法从 cafe 反推出原文是 café、cafè 还是 cafê。所以处理前一定保留原文,结果另存一份,不要直接覆盖源文件,否则再想找回原拼写就没有依据了。
它也不是音译工具。德语 ü 在正式转写里常写成 ue,丹麦语 ø 常写成 oe,而这里只会给出 u 和 ø 原样。需要符合某国转写规范时,得用专门的音译表或国际化库,不能用这个结果交差。
- 结果不可逆,务必保留原文
- 不做德语 ü→ue 这类音译
- 不处理西里尔、希腊字母
- 大小写保持不变
常见问题
去掉重音后还能还原吗?
不能自动还原。删除记号时,é、è、ê 都会变成 e,原本是哪一个已经无从判断。请保留原始文件;如果结果只用于搜索或导入,另存一份即可,不要覆盖源文件。
为什么 ø 没有变成 o?
因为 ø 在 Unicode 里不是「基本字母 + 组合记号」,而是一个独立的字符,没有可拆的记号。同样,ß、ł、đ、æ、œ 也不会变成 ss、l、d、ae、oe,需要的话只能手动替换。
中文和日文会受影响吗?
不会。处理只针对拉丁字母上的组合记号,汉字、假名等其他文字保持可读,不会变成空格或问号。混排文本可以直接处理,处理完检查一遍拼写即可。
相关工具:去除重音符号