表情文本转换器

这是一套固定的替换规则:26 个英文字母、10 个数字和空格各对应一个表情,共 37 项,写死在页面里,不随机、不联网。默认示例 Hello 2026 会被逐字符换成 🏠 🐘 🍋 🍋 🍊 ⬜ 🕑 🕛 🕑 🕕,大小写不敏感,中文和标点不在表内所以原样保留。反过来把表情串粘回来也能解密,解密结果一律小写,因为加密时大小写被合并过。所有处理都在当前浏览器里完成。

编码按 37 项固定映射逐字符替换;解码按同一张表反向查表
Ctrl 或 Cmd 加 Enter 立即转换;输入过程中每敲一个字符都会实时刷新

总字符 10,已编码 10,原样保留 0

提示:结果区带 role="alert",读屏软件会朗读本次结果;textarea 里回车照常换行,请用 Ctrl 或 Cmd 加 Enter 触发转换。

表情映射表(共 37 项)

原字符表情助记
a🍎Apple 苹果
b🐝Bee 蜜蜂
c🐱Cat 猫
d🐶Dog 狗
e🐘Elephant 大象
f🐸Frog 青蛙
g🍇Grape 葡萄
h🏠House 房子
i🍦Ice cream 冰淇淋
j🧃Juice 果汁
k🔑Key 钥匙
l🍋Lemon 柠檬

映射表是写死在页面里的固定规则,不随上方输入变化;解密时必须用同一张表,换成别处的表情对照表会解错。

使用方法

第一步,选方向。表情文本转换器默认停在「编码:文字 → 表情」,输入框里已经填好 Hello 2026,打开页面结果区就有内容,不需要先点任何按钮。想解密就把方向切成「解码:表情 → 文字」。

第二步,填内容。编码方向可以填任意文本:英文字母和数字会被替换,空格换成空白格,中文、标点、换行等不在 37 项映射表里的字符会原样留在结果中。解码方向请填入用同一张表编码出来的表情串,符号之间用空格或换行分隔。

第三步,看结果。结果区给出转换后的整段内容,下面一行统计三个数:总字符数、被替换的字符数、原样保留的字符数。默认示例的统计是「总字符 10,已编码 10,原样保留 0」,因为 Hello 2026 这十个字符全部在表内。

第四步,点「复制结果」把整段结果放进剪贴板,再粘到聊天窗口即可。textarea 里回车照常换行,要手动触发转换请按 Ctrl 加 Enter(macOS 上是 Cmd 加 Enter);正常情况下每敲一个字符结果就已刷新,用不到快捷键。

点「载入示例」把方向、输入一起还原成默认值。下方映射表的「导出映射表 CSV」下载带 UTF-8 BOM 的表格,Excel 打开中文与表情都不会乱码;「复制映射表」按 TSV 复制,可直接粘进表格软件。

这个工具能解决什么问题

第一,给聊天和弹幕一个不影响阅读的花式写法。把一句话换成表情串,视觉上比纯文字跳,但因为映射固定、可逆,对方拿同一张表就能还原,比随机表情靠谱。空格保留为空白格这一点很关键,没有它整串表情会粘成一团,根本看不出词在哪断。

第二,当作轻量编码练手和教学样本。37 项一一对应、无冲突、可逆,是讲清「字符集、码位、代理对、大小写折叠」这些概念最省事的素材。本页的循环里就同时处理了这四件事:按感知字符迭代、用码点区间判断代理对、查表前先折叠大小写、表外字符原样透传。

第三,快速生成占位或测试文本。需要一串「看得见长度又不会读错」的样本时,表情串比 lorem ipsum 直观:数符号个数就知道原文有几个字符,做前端截断与行高测试不容易看花眼。

第四,验证表情在目标环境能不能正常显示。把一串表情贴到目标平台,能立刻看出哪些符号显示成方框。悠悠球和部分时钟类表情在旧系统上可能缺字形,结果区会如实显示你系统上的实际样子。

本页不做这些事:不做随机表情生成;不把中文映射成表情;不处理拼音、谐音或缩写替换;不生成可点击的链接或图片。它只回答「这段文字按这张 37 项表换过去是什么,以及换回来的结果是什么」。

转换原理与变量说明

核心是一张固定映射表,共 37 项:26 个小写英文字母、10 个数字、1 个空格,每项对应一个表情,写在脚本里永不改变。编码就是遍历输入、逐字符查表;解码就是把表情串按空白切开、逐个反查。两张表互为反向,任意一项都不会冲突。

大小写折叠。查表前先把字符转成小写,所以 Hello 和 hello 编出来完全一样,解密结果也一律是小写。这是本页唯一的信息损失:原文的大小写、以及「空格和制表符」的区别,编过去就分不出来了。若原文必须保留大小写,请不要用本页编码。

按感知字符迭代,而不是按码元。JavaScript 的字符串用 UTF-16 存储,一个字符可能占一个码元,也可能占两个(代理对)。本页的循环在遇到高位代理(0xD800 到 0xDBFF)时连同后面的低位代理一起跳过,保证一个 Emoji 符号只算一个字符。默认示例全是基本多文种平面字符,看不出来;输入里一旦带了绘文字,统计数就会和「按码元数」差开。

表外字符原样透传。中文、英文标点、换行符、制表符都不在表内,编码时按原字符 push 进结果,解码时按原 token 保留。因此一段中英混排的文字编过去,中文部分会和表情长得很像但并不是加密内容,看到时要能分辨。

分隔符的选择。编码结果用单个空格连接各个符号。这个空格是给人看的视觉分隔,不是加密内容的一部分;解码时按空白切开,所以空格、换行、连续多个空格在解码时等效。若把编码结果里的空格手动删掉,整串会粘成一个 token,解密立刻失效。

完整示例(默认输入实测)

示例条件与页面默认值完全一致:编码方向,输入 Hello 2026。逐字符核对——H 折叠成 h 查表得 🏠,e 得 🐘,l 得 🍋,第二个 l 仍是 🍋,o 得 🍊,空格得 ⬜,2 得 🕑,0 得 🕛,2 得 🕑,6 得 🕕。十个符号用空格连起来,结果区显示「🏠 🐘 🍋 🍋 🍊 ⬜ 🕑 🕛 🕑 🕕」,统计行显示「总字符 10,已编码 10,原样保留 0」。

换几段文本看边界行为:

混合识别的情况也试一下:输入「🍎 🐝 🐱 中文」并切到解码方向,前三个符号解出 abc,中文不在表内原样保留,结果是「abc中文」,统计为「总符号 4,已解码 3,未识别 1」。未识别不等于报错,只有整段一个都解不出来时才提示错误。

需要提醒:编码结果里的空格是视觉分隔,复制粘贴时若被聊天软件吞掉或合并,解密就会失败。发现解不出来时,先数一下符号个数和原文的字符数是否一致,再检查空格是否还在。

表情映射表

下表共 37 行,默认显示前 12 行(a 到 l),点「加载更多(还有 25 项)」展开剩余字母、数字和空格。三列分别是原字符、表情和助记词,助记词取英文首字母或形象联想,背起来比死记快得多:a 是 Apple 所以用 🍎,u 是 Umbrella 所以用 ☂️,z 是 Zzz 所以用 💤。

数字十项用时钟面表示:0 是 🕛 十二点整,1 到 9 依次是 🕐 到 🕘,顺序和数字大小一致。空格一项用 ⬜ 空白格,视觉上最接近「这里原本有个空格」,也是让整串表情保持可读的关键。

这张表是写死在页面里的固定规则,不是随机生成的,也不随输入变化。换一台电脑、换一个浏览器、甚至离线打开,编出来的结果都一模一样。要解密别人发的表情串,必须确认对方用的是同一张表。

结果边界与舍入

常见问题

为什么 Hello 编出来是 🏠 🐘 🍋 🍋 🍊?

因为查表前先把大写 H 折叠成小写 h,h 对应 🏠(House 房子);e 对应 🐘(Elephant 大象);l 对应 🍋(Lemon 柠檬),出现两次所以有两个 🍋;o 对应 🍊(Orange 橙子)。每个符号只由字符本身决定,和位置无关。

解密回来为什么变成小写了?

因为编码时做了大小写折叠:查表前统一转成小写,大写和小写查的是同一项。原文的大小写信息在这一步被丢掉,所以解密只能给出小写形式。这是固定映射表的固有取舍,不是 bug。

中文为什么没有被转换?

因为映射表只有 37 项,全部是 26 个英文字母、10 个数字和一个空格,里面没有任何汉字。中文不在表内,编码时按原字符透传,看起来就像没被处理。这是有意的范围收缩:给几千个汉字各配一个表情既记不住也容易撞车。

空格为什么要转成 ⬜?

空格若原样保留,整串表情里就会出现真正的空格,和符号之间的分隔空格混在一起,解密时无法判断哪个是词间空格。转成 ⬜ 之后只剩一种空格,切开即可还原。

可以把结果里的空格删掉吗?

不建议。空格是符号之间的视觉分隔,解码时按空白切分,删掉后整串会粘成一个 token,反查表时找不到对应项。若担心聊天软件吞空格,可以改成用换行分隔,解码时换行和空格等效。

这套映射是随机的吗?

不是。37 项全部写死在页面脚本里,不调用随机数,不联网,不随时间变化。同一段文字在任何设备、任何时间编出来的结果都完全相同。这也是它能被反向解密的前提。

为什么有的表情显示成方框?

方框表示你的系统缺少该码位对应的字形,通常是系统表情字体版本较旧。悠悠球 🪀 是 Unicode 13.0 新增的符号,旧系统上容易缺。复制出去的码位是正确的,换一台新设备或更新字体后即可正常显示。

我的数据会被上传吗?

不会。所有转换只在当前浏览器本地执行,页面不发起任何网络请求,也不写 Cookie 或 localStorage。

相关工具