博客
简体中文

Unicode 规范化工具 — NFC、NFD、NFKC、NFKD 在线转换

文本和文件名的 Unicode 规范化工具,可修复 macOS 分解形式的文件名

在浏览器中处理 · 不上传任何内容

规范化形式

要修复在 Mac 上创建的带重音字母或韩文的文件名等分解文本(通常是 NFD),请选择 NFC。

转换文本

示例以分解形式(NFD)保存,和 macOS 保存文件名的方式一样。它看起来相同,但比较时是不同的文本。

  • 0 个分解的韩文字母
  • 0 个会被 NFKC 改变的兼容字符

已转换为 NFC:23 个码点 → 20 个

结果
Résumé – Café 报告.pdf
显示码点
转换前
U+0052 U+0065 U+0301 U+0073 U+0075 U+006D U+0065 U+0301 U+0020 U+2013 U+0020 U+0043 U+0061 U+0066 U+0065 U+0301 U+0020 U+62A5 U+544A U+002E U+0070 U+0064 U+0066
转换后
U+0052 U+00E9 U+0073 U+0075 U+006D U+00E9 U+0020 U+2013 U+0020 U+0043 U+0061 U+0066 U+00E9 U+0020 U+62A5 U+544A U+002E U+0070 U+0064 U+0066

批量修复文件名

每行粘贴一个文件名,或选择文件,下载文件名已规范化的 ZIP。文件不会离开你的浏览器。

使用浏览器的 String.prototype.normalize 应用 Unicode 标准附录 #15(Unicode Normalization Forms)。NFC 和 NFD 绝不会改变文字的外观或含义;NFKC 和 NFKD 还会折叠全角字母(A→A)、带圈数字(①→1)和单位符号(㎏→kg)等兼容字符,所以文字的外观可能改变。ZIP 中的文件名以 UTF-8 保存。

功能简介

Unicode 规范化工具让看起来相同的文本在底层也真正相同。同一个字符可以有不止一种存储方式:“é”可以是一个码点,也可以是“e”后面跟一个组合重音符;一个韩文音节可以是一个码点,也可以是三个字母(자모)。两种形式混在一起,就会出现搜索不到、文件名重复、上传被拒等问题。粘贴文本或文件名,选择一种规范化形式,即可得到一致的输出。

使用方法

  1. 选择一种形式。修复来自 macOS 的分解文本,选 NFC 就对了。
  2. 把文本粘贴到第一个输入框。结果会立即出现,并显示分解的韩文字母和兼容字符的数量。
  3. 打开“显示码点”,对比转换前后的值。
  4. 在文件名区域,每行粘贴一个文件名,或选择文件。
  5. 如果选择了文件,就下载文件名已规范化的 ZIP。

工作原理

  • 使用浏览器的 String.prototype.normalize,应用 Unicode 标准附录 #15(Unicode Normalization Forms)中的四种形式。
  • 分解的韩文按组合用字母(U+1100–U+11FF 及其扩展区块)计数。用键盘输入的 ㅋ 这类兼容字母不算作分解形式。
  • 兼容字符是指 NFKC 形式与 NFC 形式不同的字符。
  • ZIP 中的文件名以 UTF-8 保存,文件内容不重新压缩直接存入。每次最多 200 个文件、500 MB;在手机和平板上为 150 MB,因为 ZIP 是在内存中生成的。

示例

输入 形式 结果
cafe + U+0301(5 个码点) NFC café(4 个)
café NFD cafe + U+0301
A①㎏fi NFKC A1kgfi
分解形式的 한글.txt(10 个码点) NFC 한글.txt(6 个)
㈜ NFKC (주)

常见问题

为什么 Mac 上的文件名到了别处会显示异常?

macOS 以分解形式(NFD)保存文件名,é 会存成 e 加一个组合重音符,韩文音节会拆成单独的字母(자모)。一些 Windows 程序和网页表单会把这些部件分开显示,或者把文件名当作不同的文本。转换为 NFC 就能重新组合起来。

能直接重命名我电脑上的文件吗?

网页无法重命名你磁盘上的文件。可以选择文件,下载一个文件名已规范化的 ZIP,或者复制修正后的文件名列表。

NFC 和 NFKC 有什么区别?

NFC 只组合等价的字符,文字的外观和含义都不变。NFKC 还会把全角字母、带圈数字、fi 这样的连字以及 ㎏ 这样的单位符号等兼容字符折叠成普通字符,因此文字的外观可能改变。

两个字符串看起来一模一样,为什么还要在意?

NFC 和 NFD 的文本看起来一样,比较时却不相等,会导致搜索、查重和上传出问题。打开“显示码点”就能看到实际的值。

会上传任何内容吗?

不会。规范化和生成 ZIP 都在你的浏览器中完成。

没找到想要的工具?