使用方法
- 在文本框里输入要转换的内容。页面默认已经填好示例 Cafe Zoom 2026;只有 A–Z、a–z 这两个字母区间会被替换,数字 0–9、汉字、标点、emoji 一律原样保留。
- 结果区固定给出三档:Script 档(数学花体)、Bold Script 档(加粗花体)、Fraktur 档(德文尖角体)。每档上面是档位名与「复制」按钮,中间是转换后的整串文字,下面是这一档逐字符的真实码位,形如
U+1D49E。 - 点某一档右侧的「复制」,只把该档转换后的文字写进剪贴板,不带码位行;直接粘到昵称、个人简介、标题或签名里即可。
- 下方「全字符映射表」把 A–Z、a–z 共 52 个字母在三档下的结果与码位全部列出,默认显示 12 行,点「加载更多」每次再放 12 行。点「复制映射表」得到制表符分隔的文本,点「导出映射表 CSV」下载一个开头带 UTF-8 BOM 的表格文件,双击用 Excel 打开不会乱码。
- 输入框内按 Ctrl + Enter(macOS 为 Cmd + Enter)立即重新生成;载入示例按钮随时把内容恢复成 Cafe Zoom 2026。
这个花体文本生成器能解决什么问题
一是在只接受纯文本的字段里做出连笔花体的观感。社交平台的昵称、简介、弹幕大多不允许上传字体文件,把 Script 换成 𝒮𝒸𝓇𝒾𝓅𝓉 是唯一能在字符层面做出这种观感的办法,换行、头像框裁切都不会破坏它。
二是直接产出数学排版里要用的花体符号。花体字母在数学里是专用记号:拉普拉斯变换、拉格朗日量、傅里叶变换、幂集、哈密顿量、集合族分别写作 𝓛、𝓛、𝓕、𝓟、ℋ、ℱ。这些字符在公式编辑器之外没法直接敲出来,用本页映射一遍再粘进论文批注、图表题注或讲义里即可。
三是做德文尖角体式的复古排版。Fraktur 的字形来自中世纪德文手抄本,常出现在啤酒标签、报纸报头、乐队标识上;把标题换到 Fraktur 档,就能得到那种古老印刷物的气质。
四是核对一段已经带花体的文字到底是什么码位。别人发来的花体句子看起来差不多,码位却可能完全不同:ℋ 是 U+210B、𝓗 是 U+1D4D7,两者外观接近但属于不同区块。逐字符码位列可以直接比对,排查复制后掉字、显示方框的原因。
本页不做这些事:不安装或更换字体(换的是字符,不是字体文件)、不做笔画加粗、不做斜置变形、不做社交平台昵称能否注册的兼容性诊断。需要这些能力请到对应的专门页面。
原理和变量:三个花体区块与码点平移
这个花体文本生成器做的事只有一句:把输入按码点切成字符,判断它是不是 A–Z 或 a–z,是就换成一个同属拉丁字母、但字形是连笔花体的 Unicode 字符,再拼回去。用到的两个 API 是 str.codePointAt(0) 与 String.fromCodePoint();切分必须用 Array.from(str),不能用 str.length 直接循环。
为什么必须按码点走。这三个区块都位于 Unicode 补充平面,码位大于 U+FFFF,在 JavaScript 的 UTF-16 字符串里以代理对的形式占两个码元。charCodeAt(0) 只能读到半个代理(例如 55349),拿不到完整的 U+1D49E;codePointAt(0) 才会还原真实码位。同理,按 str.length 循环会把代理对从中间劈开,所以要先 Array.from 切成真实字符。
三档的码点平移规则。每个区块里 26 个大写和 26 个小写各自连续排布,所以能按基址加序号直接算:大写码位 = 大写基址 + (原码位 − 65),小写码位 = 小写基址 + (原码位 − 97)。三档基址分别是:数学花体 Script,大写 U+1D49C、小写 U+1D4B6;加粗花体 Bold Script,大写 U+1D4D0、小写 U+1D4EA;德文尖角体 Fraktur,大写 U+1D504、小写 U+1D51E。三档同排字符的间隔恰好都是 52 个码位,这正是 26 个大写加 26 个小写的结果。
保留位让「整段推」这条路走不通。看似方正的区间里其实有空位:Script 档 52 个字母中有 11 个是保留位——大写 B E F H I L M R(U+1D49D、U+1D4A0、U+1D4A1、U+1D4A3、U+1D4A4、U+1D4A7、U+1D4A8、U+1D4AD),小写 e g o(U+1D4BA、U+1D4BC、U+1D4C4);Fraktur 档有 5 个——大写 C H I R Z(U+1D506、U+1D50B、U+1D50C、U+1D515、U+1D51D);Bold Script 档最幸运,一个缺口都没有,52 个字母全部连续可推。
这些位置之所以空着,是因为对应的字形在更早的 Unicode 版本里已经单独编过码,为了不出现「一个字符两个码位」,新区块给它们留了空。它们的真实码位落在 Letterlike Symbols 区块:Script 档的大写回退到 ℬ U+212C、ℰ U+2130、ℱ U+2131、ℋ U+210B、ℐ U+2110、ℒ U+2112、ℳ U+2133、ℛ U+211B,小写回退到 ℯ U+212F、ℊ U+210A、ℴ U+2134;Fraktur 档回退到 ℭ U+212D、ℌ U+210C、ℑ U+2111、ℜ U+211C、ℨ U+2128。
所以正确写法是:能整段平移的字符用基址算,命中保留位的字符查一张回退表。本页给 Script 档挂了 11 项、Fraktur 档挂了 5 项回退表,Bold Script 档不需要。数字方面,三个花体区块都没有数字字形,所以 0–9 一律原样输出——这正是示例里的 2026 从头到尾没有变化的原因。
完整示例:Cafe Zoom 2026 的逐字符结果
示例条件就是页面打开时文本框里的那段文字:Cafe Zoom 2026,共 14 个字符。下面把它在 Script 档下的每个字符与码位逐位列出,可以和结果区第一行下面的码位行对照:
CU+0043 →𝒞U+1D49E(大写第 3 个,U+1D49C + 2)aU+0061 →𝒶U+1D4B6(正好是小写基址本身)fU+0066 →𝒻U+1D4BB(小写第 6 个)eU+0065 →ℯU+212F(位置 U+1D4BA 是保留位,回退到符号区)- 空格 U+0020 → 空格 U+0020(不在映射范围内)
ZU+005A →𝒵U+1D4B5(大写第 26 个,区块末位)oU+006F →ℴU+2134(位置 U+1D4C4 是保留位,回退;出现两次码位相同)mU+006D →𝓂U+1D4C2(小写第 13 个)2 0 2 6→ U+0032 U+0030 U+0032 U+0036(数字没有花体字形,原样保留)
整串在 Script 档下是 𝒞𝒶𝒻ℯ 𝒵ℴℴ𝓂 2026,码位序列为 U+1D49E U+1D4B6 U+1D4BB U+212F U+0020 U+1D4B5 U+2134 U+2134 U+1D4C2 U+0020 U+0032 U+0030 U+0032 U+0036。
同一串在 Bold Script 档下是 𝓒𝓪𝓯𝓮 𝓩𝓸𝓸𝓶 2026,码位 U+1D4D2 U+1D4EA U+1D4EF U+1D4EE U+0020 U+1D4E9 U+1D4F8 U+1D4F8 U+1D4F6 U+0020 U+0032 U+0030 U+0032 U+0036——这一档没有缺口,所以 e 的码位是 U+1D4EE 而不是上一档的 U+212F,全部落在区块内部。
在 Fraktur 档下是 ℭ𝔞𝔣𝔢 ℨ𝔬𝔬𝔪 2026,码位 U+212D U+1D51E U+1D523 U+1D522 U+0020 U+2128 U+1D52C U+1D52C U+1D52A U+0020 U+0032 U+0030 U+0032 U+0036——C 和 Z 恰好都是 Fraktur 的缺口,回退成了 ℭ U+212D 与 ℨ U+2128。
这三组码位是 Unicode 的固定分配结果,与显示效果无关;屏幕上好不好看,取决于你的系统有没有为这些码位准备字形。
输入范围与三档映射对照表
下表是三个区块的覆盖范围、保留位数量与代表性字符,用来快速判断某一档能不能覆盖你要的字母。三个区间都在 U+1D400–U+1D7FF 这个「数学字母数字符号」大区块内,彼此紧挨着。
| 档位 | 大写范围 | 小写范围 | 保留位 | 需回退字母 | 数字字形 |
|---|---|---|---|---|---|
| Script 档(数学花体) | U+1D49C–U+1D4B5 | U+1D4B6–U+1D4CF | 11 | B E F H I L M R e g o | 无 |
| Bold Script 档(加粗花体) | U+1D4D0–U+1D4E9 | U+1D4EA–U+1D503 | 0 | 无 | 无 |
| Fraktur 档(德文尖角体) | U+1D504–U+1D51D | U+1D51E–U+1D537 | 5 | C H I R Z | 无 |
第二张表给出全部 16 个回退字母的真实码位。凡是遇到 Script 档或 Fraktur 档,先来这里查;Bold Script 档不出现回退,因此不在表内。
| 档位 | 字母 | 回退字符 | 真实码位 | 原本应在的保留位 |
|---|---|---|---|---|
| Script 档 | B | ℬ | U+212C | U+1D49D |
| Script 档 | E | ℰ | U+2130 | U+1D4A0 |
| Script 档 | F | ℱ | U+2131 | U+1D4A1 |
| Script 档 | H | ℋ | U+210B | U+1D4A3 |
| Script 档 | I | ℐ | U+2110 | U+1D4A4 |
| Script 档 | L | ℒ | U+2112 | U+1D4A7 |
| Script 档 | M | ℳ | U+2133 | U+1D4A8 |
| Script 档 | R | ℛ | U+211B | U+1D4AD |
| Script 档 | e | ℯ | U+212F | U+1D4BA |
| Script 档 | g | ℊ | U+210A | U+1D4BC |
| Script 档 | o | ℴ | U+2134 | U+1D4C4 |
| Fraktur 档 | C | ℭ | U+212D | U+1D506 |
| Fraktur 档 | H | ℌ | U+210C | U+1D50B |
| Fraktur 档 | I | ℑ | U+2111 | U+1D50C |
| Fraktur 档 | R | ℜ | U+211C | U+1D515 |
| Fraktur 档 | Z | ℨ | U+2128 | U+1D51D |
输入上限是文本框的 maxlength="120",按 UTF-16 码元计算。花体字符本身占两个码元,所以粘贴已经转换过的结果时实际只能放约 60 个,纯英数才放得满 120 个。上方动态生成的映射表按行分页,默认 12 行,可以展开到 52 行。
边界与兼容性:保留位回退、方框与平台归一化
- 回退字符的字形和同档其它字母并不完全一致。Script 档的 ℯ U+212F 与 𝓂 U+1D4C2 来自不同区块、不同年代的字体设计,笔画粗细和倾斜度会有细微差别;Fraktur 档的 ℭ U+212D 与 𝔞 U+1D51E 同理。这不是工具算错,是 Unicode 历史分配的结果,任何做这份映射的工具都绕不开。
- 三个档位都没有数字、没有汉字、没有标点。0–9 原样输出;汉字在 Unicode 里不存在花体变体(只有拉丁字母有),所以输入一段中文只会得到一模一样的中文,结果区会提示本次没有可映射字符。
- 显示成空心方框是字体缺字形,不是工具出错。渲染某个码位时,先在首选字体里找字形,找不到就沿 fallback 字体链往下找,整条链都没有才画一个方框。花体区块的字形制作成本高,不少手机字体只做了一部分,同一串文字在不同设备上可能一半正常一半方框。符号区的 ℋ、ℭ、ℨ 因为更早出现在数学文本里,字体覆盖率反而高得多。
- 屏幕阅读器读不出来,因为它读的是码位的官方名称。𝓛 的正式名称是 MATHEMATICAL SCRIPT CAPITAL L,读屏软件要么把这串英文逐词念完、要么当作无意义符号跳过,绝不会念成「字母 L」。把花体用在正文、按钮或表单标签上,等于对读屏用户和搜索爬虫同时隐身。
- 平台做 NFKC 归一化时,花体会被整串打回普通字母。实测 Script 的 𝒞、Bold Script 的 𝓐、Fraktur 的 𝔄,以及回退字符 ℋ、ℭ,过一遍
normalize('NFKC')后分别变成 C、A、A、H、C。中文平台的昵称、搜索索引、表单清洗常做这一步,于是出现「我这边看着是花体、对方看到的是普通字母」的差异。 - 不要拿结果当密码、账号名或网址。这类字符在不同系统里的归一化行为不一致,可能造成「输入明明正确却登录不上」;而且它们不属于普通字母表,多数账号校验会直接判为非法字符。
常见问题
为什么 Script 档里 e 和 o 看起来和别的字母不太一样?
因为这两个字母在 Script 区块里的位置(U+1D4BA、U+1D4C4)是保留位,本页把它们回退到了符号区的 ℯ U+212F 和 ℴ U+2134。它们和区块内的字母出自不同年代的字形设计,笔画倾角会略有差异,属于 Unicode 分配造成的结果。
为什么数字 2026 一个都没变?
三个花体区块只收录了拉丁字母,没有对应的数字字形。Unicode 给数学字母风格配的数字段只存在于其它风格里,花体不在其列,所以 0–9 会原样保留,这是设计而不是 bug。
同一个字母在三档之间的码位相差多少?
恰好都是 52。大写 A 在 Script 是 U+1D49C、Bold Script 是 U+1D4D0、Fraktur 是 U+1D504,相邻两档相差 0x34 即 52;小写 a 是 U+1D4B6、U+1D4EA、U+1D51E,同样是 52 递增。因为每个区块正好是 26 个大写加 26 个小写。
粘到微信、微博、抖音之后花体没了,是工具的问题吗?
不是。这些平台在入库或渲染时可能做一次 NFKC 归一化,把花体字母统一打回普通 ASCII 字母(实测 𝒞、𝓐、𝔄、ℋ、ℭ 全部被折叠)。这是对方系统的行为,你在发送端看不到,也无法从这一端避免。
结果里出现空心方框,怎么修?
方框表示当前设备的字体没有这个码位的字形。换一款覆盖更全的数学字体能解决你自己这一端,但对方看到的仍可能是方框——方框取决于对方设备,你无法替他解决。想更稳妥,可以优先使用符号区的回退字符,它们的字体覆盖率高一些。
输入中文会怎样?
中文原样输出。本页映射的是 A–Z、a–z 这些存在花体变体的拉丁字母;汉字没有对应的花体码位,Unicode 里也不存在「花体汉字」,所以只有字母段会被替换,混排时中文保持不变。
「复制映射表」和「导出映射表 CSV」有什么区别?
前者把 52 行映射表以制表符分隔的文本写进剪贴板,粘进 Excel 会自动分列;后者下载一个开头带 UTF-8 BOM 的 .csv 文件,双击用 Excel 打开不会中文乱码。两者内容完全一致。
输入的内容会传到服务器吗?
不会。这个花体文本生成器的切分、码点平移、回退查表和拼回全部在当前页面的脚本里完成,全程没有网络请求,也不写浏览器存储。打开开发者工具的 Network 面板边输入边观察,不会有新请求发出。