斜体文本生成器

把普通拉丁字母逐个换成 Unicode 数学斜体字符,得到的斜体文字可以直接粘进只认纯文本的昵称、签名和标题栏。

原文码点20
输出码点20
输出 UTF-16 码元30
被替换字母11

提示:文本框里按 Ctrl + Enter(macOS 用 Cmd + Enter)可以立刻重算一次,Enter 留给换行。页面打开时文本框内已有一段示例,改动后随时可以点「载入示例」还原。

原字符数学斜体码位无衬线斜体码位UTF-16 码元UTF-8 字节
a𝑎U+1D44E𝘢U+1D62224
b𝑏U+1D44F𝘣U+1D62324
hℎU+210E(替代)ℎU+210E(替代)13
i𝑖U+1D456𝘪U+1D62A24
l𝑙U+1D459𝘭U+1D62D24
o𝑜U+1D45C𝘰U+1D63024
t𝑡U+1D461𝘵U+1D63524
x𝑥U+1D465𝘹U+1D63924
z𝑧U+1D467𝘻U+1D63B24
00U+0030(无斜体)0U+0030(无斜体)11
##U+0023(标点)#U+0023(标点)11
A𝐴U+1D434𝘈U+1D60824

对照表共 14 行,首屏显示 12 行;h 一行两种字形都落在 U+210E,因为数学斜体小写 h 的码位 U+1D455 在 Unicode 标准里是空的。导出 CSV 带 UTF-8 BOM,Excel 打开不乱码。

使用方法

  1. 把要转换的文字粘进上面的文本框。页面打开时框里已经有一段示例 hello 斜体 italic 2026,转换结果会立刻显示在下方的只读框里,不需要点任何按钮。
  2. 变换内容时结果实时更新。文本较长时可以按 Ctrl + Enter(macOS 用 Cmd + Enter)手动重算一次,Enter 键留给换行——这里处理的是多行文本,回车换行比触发更重要。
  3. 「字形档位」决定用哪一段码位:默认的 数学斜体 U+1D434 是衬线体,笔画末端带装饰;换成 无衬线斜体 U+1D608 后线条粗细均匀,在手机小字号下更清楚。
  4. 小写 h 是个特例,由「小写 h 的替身」决定:默认用 ℎ(U+210E),也可以选 𝒉(U+1D489)或干脆保留 ASCII 的 h。原因见下面的原理一节。
  5. 点「复制结果」把斜体文字带走,粘到昵称、群名、签名、标题栏等只支持纯文本的位置。点「载入示例」还原样例,点「清空」清空输入。
  6. 下方对照表逐字符列出码位,支持「加载更多」「复制对照表」(TSV)和「导出 CSV」。

这个斜体文本生成器能解决什么问题

一是往不支持富文本的位置塞斜体。微博昵称、微信签名、抖音个人简介、QQ 群名、论坛的用户名、电商的商品标题,这些位置只收纯文本,没有加粗斜体的按钮,写 font-style: italic 或者 <i> 只会被当成普通字符显示出来。斜体文本生成器的做法是把斜体写进字符本身:换个码点,样式就跟着走了,任何能显示文字的输入框都认。

二是在没有 Markdown 的评论区做视觉强调。很多平台的评论区不解析 Markdown,但会原样显示字符,用它把一个词换成斜体就能起到分隔和提示的作用。

三是做排版样稿。给设计或运营同事发一版纯文本的标题候选,用斜体字标注需要强调的部分,比截图更省事,也比「这个字要斜体」的口头说明更准确。

四是批量验证字体覆盖。把一段英文字母转成斜体字符,粘到目标设备或目标 App 里看看有没有变成方框,就能快速判断这台设备的字体有没有覆盖 U+1D400 区块——做多端适配时这一步比查文档快。

本页不做这些事:不做真正的排版斜体(网页里能用 CSS 就用 CSS,本页产出的是换了字符的文本),不转中文与日文假名(Unicode 数学字母区块只覆盖拉丁字母和希腊字母),不做粗体,也不做花体、手写体、DoubleStruck 这些别的字形。要粗体请用页面底部的「粗体文本生成器」,要一次比较多种字形请用「特殊字体生成器」。

生成原理:码点偏移、U+1D455 空位与 ℎ 替代

核心只有两个 API:codePointAt() 与 String.fromCodePoint()。前者按码点读出一个字符的编号,后者按编号造出新字符。这里不能用 charCodeAt():它按 UTF-16 码元读取,遇到编号超过 U+FFFF 的字符时会把一个字符劈成两个半截的代理码元,而 U+1D434 之后的全部码点都超过 U+FFFF,用错这个函数会得到一堆乱码。

映射规则是一次纯算术偏移。大写字母的斜体码点从 U+1D434 开始,小写字母从 U+1D44E 开始,所以 A 到 Z 依次落在 U+1D434~U+1D44D,a 到 z 依次落在 U+1D44E~U+1D467。换算公式就是「基址 +(原码点 − ASCII 起点)」:字母 A 是 0x41,斜体 A 就是 0x1D434 +(0x41 − 0x41)= U+1D434;字母 I 是 0x49,斜体 I 就是 0x1D434 + 8 = U+1D43C。小写同理,字母 a 是 0x61,得到 U+1D44E。

唯一要特殊处理的是小写 h。按偏移算,h 是 0x61 + 7,对应码点 U+1D455——而 Unicode 标准里这个码位没有分配字符,是数学字母区块里唯一的一个小写空位。原因是 U+210E 的 ℎ(PLANCK CONSTANT,普朗克常数符号)形状上就是一个斜体 h,标准把它当作既有字符使用,不再重复造一个。所以本页默认把 h 映射到 U+210E;如果你更喜欢笔画更重的效果,可以切到 U+1D489(粗体斜体小写 h),或者干脆保留 ASCII 的 h。三种选择都不会影响其它 25 个小写字母。

其余字符一律原样保留。数字没有斜体码位——数学字母区块里的十套数字分别是粗体、双线体、无衬线、无衬线粗体、等宽这几档,没有斜体数字,所以 0 到 9 转完之后还是 0 到 9。中文、日文假名、标点、空格、换行同样不变,因为斜体区块里根本没有对应的码点。这也是为什么转换后的文本看起来「只有英文部分变了样」。

这些字符在 Unicode 里带兼容性分解。数学字母区块的每个字符都有一条 <font> 兼容映射,指向它所模仿的普通 ASCII 字母。这意味着做一次 NFKC 或 NFKD 归一化,斜体 A 会被直接折叠回 ASCII 的 A,U+210E 的 ℎ 也会被折叠回 h。归一化在很多环节会自动发生:表单提交前的数据清洗、数据库的唯一索引、搜索引擎的索引器、部分输入法的候选处理。

本页只用字符串运算,不做归一化,也不联网。输入多少码点、映射多少次、拼接多少段,全部在当前页面完成;每次修改输入都会重新跑一遍,所以结果永远和你看到的输入一致。

完整示例(默认示例文本)

示例条件就是页面打开时的状态:文本框里是 hello 斜体 italic 2026,字形用默认的数学斜体 U+1D434,小写 h 用默认的 ℎ(U+210E)。

再拿一个更短的例子看长度口径:Italic Text 是 11 个码点,转换后依然是 11 个码点,但由于 10 个字母都进了补充平面,按 UTF-16 数出来是 21 个字符,输出为 𝐼𝑡𝑎𝑙𝑖𝑐 𝑇𝑒𝑥𝑡。很多平台的长度限制是按 UTF-16 算的,这就是「明明只有 11 个字母却提示超过 20 字」的来源。

码位对照表与两档字形的选择

下图这张表逐字符给出两档字形的码位,以及它们在内存里占多少。看「UTF-16 码元」和「UTF-8 字节」两列就能明白:斜体字母看着还是 1 个字符,实际存储体积是普通字母的 4 到 2 倍。

原字符数学斜体(U+1D434 起)码位无衬线斜体(U+1D608 起)码位UTF-16 码元UTF-8 字节
a𝑎U+1D44E𝘢U+1D62224
b𝑏U+1D44F𝘣U+1D62324
hℎU+210E(替代)ℎU+210E(替代)13
i𝑖U+1D456𝘪U+1D62A24
l𝑙U+1D459𝘭U+1D62D24
o𝑜U+1D45C𝘰U+1D63024
t𝑡U+1D461𝘵U+1D63524
x𝑥U+1D465𝘹U+1D63924
z𝑧U+1D467𝘻U+1D63B24
A𝐴U+1D434𝘈U+1D60824
I𝐼U+1D43C𝘐U+1D61024
H𝐻U+1D43B𝘏U+1D60F24
00U+0030(无斜体)0U+0030(无斜体)11
##U+0023(标点)#U+0023(标点)11

两档字形怎么选:数学斜体(U+1D434)笔画细、末梢带衬线,接近传统印刷体,适合放在标题和正文字号较大的位置;无衬线斜体(U+1D608)笔画等宽、没有装饰,在 12 到 14 像素的手机小字号下比前者清晰。两档的大写基址分别是 U+1D434 与 U+1D608,小写基址是 U+1D44E 与 U+1D622,各自连续 26 个码位、没有别的空位——小写 h 的空位只在数学斜体那一档里出现,无衬线斜体本来也是用 U+210E 补的,本页统一处理。

边界:补充平面、平台截断与归一化

常见问题

为什么小写 h 转出来是 ℎ,看起来和其他字母不是一个风格?

因为数学斜体小写 h 在 Unicode 里根本没有码位。小写 a 对应 U+1D44E,往后数 7 位落在 U+1D455,而这个码位在标准里是空的——数学字母区块里唯一一个未分配的小写字母位。标准认为 U+210E 的 ℎ(普朗克常数符号)已经是一个形状合适的斜体 h,所以不再另造。本页默认用它补位,也可以切成 U+1D489 的 𝒉,或者保留 ASCII 的 h。

为什么粘到微信、小红书里会少字或者显示成方框?

两种情况。少字通常是长度截断:斜体字母每个占 2 个 UTF-16 码元,按码元计数的字段会在上限处把尾巴切掉,先留出原文两倍的余量再粘。方框则是字体缺字形,说明这台设备的字体没有覆盖 U+1D400 区块,换一台设备或换成无衬线档位都未必有效,只能改用普通字母。

用斜体文字写的昵称,为什么别人搜不到?

因为搜索和去重通常会先做 NFKC 归一化,而斜体字母带 <font> 兼容分解,会被折叠成普通 ASCII 字母。别人输入普通字母其实匹配的是同一个字符,但如果搜索接口先按原始码点比对,两边就对不上。想让昵称可被搜索,末尾或开头保留一个普通字母的版本更稳妥。

数字和标点为什么一点变化都没有?

因为 Unicode 没有斜体数字。数学字母区块里的数字只有粗体、双线体、无衬线、无衬线粗体、等宽这几档,斜体这一档在字母之后就直接跳到了粗体斜体字母,没有对应的数字码点。标点和空格更是如此,斜体区块里没有它们的映像,只能原样保留。

它和粗体文本生成器是同一个东西吗?

不是,用的码位完全不同。斜体文本生成器走的是 U+1D434(大写)与 U+1D44E(小写)这一段;粗体走的是 U+1D400 与 U+1D41A,中间隔着两段字母表。两边的字符不能互换,视觉上一个是倾斜细笔画、一个是加粗正立,混用会明显不协调。

为什么 11 个字母的单词转完显示占了 21 个字符?

因为 UTF-16 用代理对表示补充平面字符:一个斜体字母在内存里是 2 个码元,字符串.length 数的是码元,于是 11 个字母变成 21(10 个字母 ×2 + 1 个空格)。按码点数是 11,两种算法都没错,只是口径不同,而多数表单校验用的是前者。

能靠它绕过平台的敏感词过滤吗?

不能,而且原因很具体:这些字符带 <font> 兼容分解,只要过滤链路里做过一次 NFKC 归一化,斜体写法就会被还原成普通字母,和直接写原词完全一样。反过来,如果过滤没做归一化,你写的词别人也搜不到、读屏也读不出,除了让内容失效没有任何好处。

为什么粘到某些网站的表单里会被拒绝?

因为很多表单在提交前会做字符校验:要么用正则限定只允许 ASCII,要么用 NFKC 归一化后做长度和唯一性检查。斜体字符既不落在 ASCII 范围内,又会和普通字母归一化冲突,遇到前者会直接报「包含非法字符」,遇到后者会提示「用户名已存在」。

相关工具