Unicode 字符查看:逐字符看码点 U+、字节与隐藏字符
逐字符拆解任意文本,看每个字符的码点、名称、分类和 UTF-8 字节。专门用来揪出看不见的零宽字符、混淆同形字、emoji 组成,排查乱码和被噎住的解析器。
逐字符看清一段文本到底由什么组成
肉眼能看到的字符,和机器实际存的字节,常常不是一回事。一段"看着没问题"的文本里,可能藏着零宽空格、字节序标记、不换行空格,或者一个长得跟拉丁字母一模一样的西里尔字母。这些东西在编辑器里不可见,却足以让解析器报错、让用户名校验抽风、让安全校验失守。Unicode 字符检查器的作用很直接:把文本切成一个个字符,每个字符都摊开给你看,它的码点是 U+ 多少、叫什么名字、属于哪个分类、UTF-8 占几个字节。
每个字符显示什么:码点、名称、分类、字节
把文本粘进 Unicode 字符检查器,每个字符会单独占一行,给出这几样:
- 字符本身,以及它的码点 U+XXXX 和十进制值
- 这个码点的 Unicode 名称,和通用类别 (general category,比如字母、标点、控制字符)
- 十六进制的 UTF-8 字节,以及 UTF-16 码元
- 命名与数字两种 HTML 实体、JavaScript 转义
- 是否是不可见字符、控制字符或易混淆的同形字,带颜色标记
每个字段旁边都有一键复制,你不用手抄码点。
一个真实例子:汉字"中"
拿一个最普通的汉字试试。输入"中",检查器告诉你:它的码点是 U+4E2D,十进制是 20013,名称是 CJK UNIFIED IDEOGRAPH-4E2D,通用类别是字母 (Lo,其他字母)。UTF-8 编码占 3 个字节,十六进制是 E4 B8 AD。它落在 CJK 统一表意文字这个 Unicode 区块里。这一行信息,就是机器存一个"中"字时真正写下的东西。当你的数据库列长度、字数预算或导出编码出问题时,这 3 个字节往往就是答案。
揪出看不见的字符:零宽空格与 BOM
最让人抓狂的 bug,常常是一个看不见的字符。你的 JSON 加载器在第 1 行报 unexpected token,文件在编辑器里却完美无瑕。把第一行粘进来,检查器会标出潜伏在左花括号前面的 U+FEFF 字节序标记 (BOM),或者你以为是普通空格、实际是 U+00A0 不换行空格的地方。它把这些字符高亮成零宽或不可见,并给出对应的 JS 转义,你就能写一个精确的 replace 把它删掉,解析错误随之消失。零宽空格 (U+200B)、零宽连接符 (U+200D)、表意空格 (U+3000) 也都逃不掉。
排查混淆字符:同形字与 RTL 覆盖
来自不同文字系统的某些字符长得一模一样。拉丁字母 a (U+0061) 和西里尔字母 а (U+0430) 在屏幕上没有任何区别,希腊字母 ο 和拉丁字母 o 也是。攻击者用这种同形字仿冒域名、用户名和品牌名。检查器检测到某个字符是基本拉丁字母的常见同形字时,会把它标红,你立刻就能抓住肉眼看不出的脚本混用。从右到左覆盖符 U+202E (经典的文件名仿冒手法) 同样会被标出来。审核用户提交的显示名或优惠码时,扫一眼这一列,比去信任一个"看着正常"的字符串可靠得多。
看懂 emoji 的组成
我自己第一次被 emoji 长度坑到,是在定一个 VARCHAR 列的长度。一个全家福 emoji 👨👩👧👦 就把限制冲爆了。把它粘进检查器,谜底立刻揭开:grapheme 计数是 1,码点计数是 7,UTF-8 字节数是 25。工具把这个簇拆开,你看到它其实是四个人物 emoji,被三个 U+200D 零宽连接符串在一起。明白了这个结构,你才知道为什么"一个 emoji"要占 25 字节,从而正确地给列或字数预算定长度。旗帜 emoji 也是同理,它由成对的区域指示符字母组成。
配套工具
如果你拿到码点后还要进一步处理文本,这几个工具常常接在后面用:把字符转成命名或数字 HTML 实体,可以用 HTML 实体编码器;想看一段文字逐位的二进制表示,可以用 文本转二进制。检查器负责"看清",这些工具负责"转换"。
短到一个字符,长到一整段配置,Unicode 字符检查器都把它摊平给你看。下次再遇到"看着一样却不相等"的字符串,或者一个找不出原因的乱码,先逐字符扫一遍,答案往往就在某一行的码点里。
Made by Toolora · Updated 2026-06-13