上下颠倒文本生成器

把一段文字替换成对应的 180 度旋转字形,再把整串反序,得到视觉上倒过来的结果。示例「Upside Down Text 2026! 中文翻转」共 27 个码点,可映射 16 个、可映射率 59.26%,输出为「转翻文中 ¡9ᄅ0ᄅ ʇxǝT uʍoD ǝpısdU」。

按 Ctrl + Enter(macOS 用 Cmd + Enter)触发翻转,Enter 留给换行。
输出按 Unicode 码点反序并逐字符替换旋转字形,长度与输入码点数相同。
输入码点27
可映射字符16
不可映射字符11
可映射率59.26%
输出码点27

上面五张卡与下方结果框都是默认示例的服务端直出值,点任意按钮后会随当前文本重算。

字符旋转字形码点分类
aɐU+0250IPA 区
bqU+0071字母对调
cɔU+0254IPA 区
dpU+0070字母对调
eǝU+01DDLatin Ext-B
fɟU+025FIPA 区
gƃU+0183Latin Ext-B
hɥU+0265IPA 区
iıU+0131字母
jɾU+027EIPA 区
kʞU+029EIPA 区
llU+006C字形不变
mɯU+026FIPA 区
nuU+0075字母对调
ooU+006F字形不变
pdU+0064字母对调
qbU+0062字母对调
rɹU+0279IPA 区
ssU+0073字形不变
tʇU+0287IPA 区
unU+006E字母对调
vʌU+028CIPA 区
wʍU+028DIPA 区
xxU+0078字形不变
yʎU+028EIPA 区
zzU+007A字形不变
00U+0030字形不变
1ƖU+0196数字
2ᄅU+1105数字
3ƐU+0190数字
4ㄣU+3123数字
5ϛU+03DB数字
69U+0039互逆对
7ㄥU+3125数字
88U+0038字形不变
96U+0036互逆对
.˙U+02D9标点
,’U+2019标点
'‘U+2018标点
"„U+201E标点
;؛U+061B标点
:։U+0589标点
?¿U+00BF标点
!¡U+00A1标点
[]U+005D镜像对
][U+005B镜像对
()U+0029镜像对
)(U+0028镜像对
{}U+007D镜像对
}{U+007B镜像对
_‾U+203E标点
&⅋U+214B标点
%٪U+066A标点
$ƨU+01A8标点
<>U+003E镜像对
><U+003C镜像对
==U+003D字形不变
**U+002A字形不变
++U+002B字形不变
//U+002F字形不变
\\U+005C字形不变
`´U+00B4标点
~∼U+223C标点
@@U+0040字形不变
##U+0023字形不变

映射对照 12 / 65 行

使用方法

  1. 打开页面时输入框里已经放好示例「Upside Down Text 2026! 中文翻转」,共 27 个码点;结果框直接给出「转翻文中 ¡9ᄅ0ᄅ ʇxǝT uʍoD ǝpısdU」,上方五张卡显示可映射 16 个、不可映射 11 个、可映射率 59.26%。
  2. 输入上限是 2000 个码点。超过不会静默截断,会在提示区报出当前码点数并请你分段翻转。
  3. 在输入框里按 Ctrl + Enter(macOS 用 Cmd + Enter)触发,Enter 本身留给换行。
  4. 四个按钮分别是「开始翻转」「载入示例」「复制结果」「清空」。复制结果走剪贴板 API,权限被拒时会给出具体提示。
  5. 下方是 65 条字符映射对照表:默认只显示 12 行,点「加载更多」展开全部;「导出 CSV」下载带 BOM 的表格,Excel 打开中文与 IPA 字符都不乱码;「复制对照表」把整张表以 TSV 写入剪贴板。

上下颠倒文本生成器能解决什么问题

一是把普通句子变成视觉上倒过来的装饰文字。它输出的是货真价实的 Unicode 字符,不是贴图,因此可以直接粘进昵称、标题、签名、评论这些只吃纯文本的地方,任何能显示 Unicode 的终端都能渲染。

二是如实告诉你哪些字符根本翻不动。汉字、除 5 个以外的所有大写字母、以及绝大多数 emoji 都没有 180 度旋转字形,本页把它们统计成「不可映射字符」并给出可映射率,而不是假装整段都倒置成功了。示例里 27 个码点有 11 个不可映射,这个数字本身就是结论。

三是把可逆性讲清楚。数字里只有 6 与 9 互为旋转,6 翻过去是 9、9 翻回来是 6;而 1 翻过去是 Ɩ,Ɩ 再翻回来得到的是字母 I,所以 1 是单向的。凡是涉及往返还原的场合,都要先看这张表。

四是和「倒序」彻底分开。本页做的是 180 度旋转(既换字形、又反顺序),如果只想要「把字符顺序倒过来、字形不动」,那是文本倒序工具的活;如果只想要字形风格替换而不反序,见下方的字体类工具。

本页不做这些事:不把文字转成花体、手写体或粗斜体,那些属于手写体文本生成器与粗体文本生成器;也不做大小写转换,那由字母转大写负责。上下颠倒文本生成器只负责「旋转字形 + 反序」这一件事。

原理与规则说明

核心只有一行:翻转函数是 Array.from(s).map(c => MAP[c] || c).reverse().join('')。它按 Unicode 码点逐个取字符,先在 65 条映射表 MAP 里查对应的旋转字形,查不到就原样保留,最后把整个字符数组反转再拼回字符串。之所以用 Array.from 而不是 split(''),下面单独讲。

映射表为什么是这 65 条。旋转字形不是自由发挥的艺术字,而是 Unicode 里本来就存在的字符:字母取自 IPA Extensions(U+0250–U+02AF,如 ɐ U+0250、ɔ U+0254、ɟ U+025F、ɥ U+0265、ɯ U+026F、ɹ U+0279、ʇ U+0287、ʌ U+028C、ʍ U+028D、ʎ U+028E、ʞ U+029E、ɾ U+027E)与 Latin Extended-B(U+0180–U+024F,ǝ U+01DD、ƃ U+0183);数字用 IPA Extensions 与 Hangul Compatibility Jamo(ᄅ U+1105、ㄣ U+3123、ㄥ U+3125)里的形状;标点用 Letterlike Symbols 与阿拉伯/希腊区段的镜像形。整表 26 个字母 + 10 个数字 + 29 个标点,共 65 条。

为什么必须「映射 + 反序」两步。只做映射不反序,得到的是一串旋转过的字母但顺序还是从左到右,看上去并不倒;只反序不映射,那就是倒序工具的产物,字形完全没变。两步合起来才是「上下颠倒」。这两步的先后其实可以交换:因为映射是逐字符的,先映射后反序与先反序后映射结果完全相同,本页按先映射后反序写,只是为了读起来更直观。

真正的坑在「按什么切分字符」。JavaScript 字符串是 UTF-16,一个 emoji 常由一对代理项(surrogate pair)组成。用 split('') 会把它劈成两个孤立代理项,输出里就出现方块;用 Array.from(或 [...s])按码点迭代则不会。实测「Hi😀」用 Array.from 得到 3 个元素,用 split('') 得到 4 个——多出来的那一个就是被劈断的代理项。这是本页唯一一处必须用码点迭代的代码,也是「上下颠倒文本生成器」和随手写两行的区别。

边界数字要写清楚。CJK 统一表意文字 U+4E00–U+9FFF 共 20992 个码位里,没有任何一个被定义为 180 度旋转字形,所以汉字只能被反序、不会被改变形状;A–Z 26 个大写字母里只有 5 个存在旋转形态(Ⅎ U+2132、ℭ U+212D、ℌ U+210C、ℨ U+2128、ℊ U+210A),覆盖率为 5 ÷ 26 = 19.23%,其余 21 个属于不可映射;数字里 0 与 8 旋转后字形不变,只有 6↔9 互为旋转对。

常见误用要纠正两处。第一,别把「上下颠倒」当成「倒序」——前者换字形,后者只换顺序,两者结果完全不同。第二,别以为中文也能真倒置:本页对汉字只会给出反序后的原字,这正是可映射率会明显下降的原因,也是页面上要显示「不可映射字符数」的理由。

完整示例(数值仅作演示)

与页面默认值完全一致:输入「Upside Down Text 2026! 中文翻转」,共 27 个码点。实测:

  • 可映射 16 个(11 个字母、4 个数字 2/0/2/6、1 个感叹号),不可映射 11 个(4 个空格、3 个大写字母 U/D/T、4 个汉字 中文翻转);
  • 可映射率 16 ÷ 27 = 59.2593%,显示 59.26%;
  • 输出为 「转翻文中 ¡9ᄅ0ᄅ ʇxǝT uʍoD ǝpısdU」,输出码点仍是 27 个——翻转既不增删字符,也不会把两个字符并成一个。

把几组典型输入放进来对照,可以看到「翻转」到底改变了什么:

  • Hello World → plɹoW ollǝH:H、W 是大写,保留原样,其余字母换了旋转字形并反序;
  • abc xyz 123 → ƐᄅƖ zʎx ɔqɐ:数字 1→Ɩ、2→ᄅ、3→Ɛ,字母 b→q、c→ɔ、a→ɐ;
  • The quick brown fox → xoɟ uʍoɹq ʞɔınb ǝɥT:整句顺序反转,每个词也各自变成旋转字形;
  • 你好世界 → 界世好你:4 个汉字全部不可映射,结果只是顺序被反转,字形一点没变。

再看一个 emoji 的例子:Hi😀 用码点迭代是 3 个字符,反向输出为 😀iH 再逐字符映射后得到「😀ıH」;如果错误地用 split(''),😀 会被拆成两个代理项,输出里就会出现两个方块。这就是本页坚持按码点处理的实际后果。

输入范围与对照表

输入长度上限 2000 个码点。2000 次 O(1) 查表加一次长度 2000 的数组反转,实测单次耗时约 0.07 毫秒,算力远不是瓶颈;设上限是为了不让超长文本把结果框撑爆、也让提示文案有明确的判断依据。超出时页面报错并给出当前码点数,而不做截断。

65 条映射按字符类别分成三块,变形与不变的条数如下:

类别总条数换了旋转字形字形不变典型
小写字母26215a→ɐ、e→ǝ、n↔u、b↔q、l/o/s/x/z 不变
数字10826↔9 互逆、1→Ɩ 单向、0 与 8 不变
标点29227?→¿、!→¡、[↔]、= * + / \ @ # 不变

不同文本的可映射率差别很大,下面这张表可以帮你预判结果会「翻得多干净」:

示例文本码点可映射不可映射可映射率
Hello World(纯英文含空格)118372.73%
abc xyz 123(英文 + 数字)119281.82%
Hello, World! (2026)(含标点)2016480.00%
你好世界(纯汉字 4 字)4040.00%
BTC 价格 65000 USDT(中英混排)1751229.41%
Hi😀🚀 emoji test(含代理对)1510566.67%

边界与精度说明

  • 输入上限 2000 个码点,超限报错不截断。截断后翻转的结果对应的是半段文本,却会显示得和整段一样确定,比直接报错更容易误导。要处理更长的文本请分段翻转。
  • 汉字不在映射表里。CJK 基础区 20992 个码位无一具备 180 度旋转字形,所以中文输入只会被反序,字形保持不变。想让中文也「倒过来」,用力的方向不在这个工具上。
  • 大写字母大部分翻不动。A–Z 里只有 Ⅎ ℭ ℌ ℨ ℊ 这 5 个有旋转形态,其余 21 个原样保留。一段全大写的文字翻转后基本「塌掉」,只剩顺序反转。
  • 数字只有 6↔9 可逆。1→Ɩ 之后无法用本页映射表旋回数字;对需要往返还原的场景,这决定了哪些数字能安全翻转。
  • 组合字符与 ZWJ 序列仍会被拆散。即使按码点迭代,e + 组合重音(如 é)是两个码点,家庭 emoji 的 ZWJ 序列是多个码点,反序后都会被打乱。要想完整处理这些序列需要字素簇分段(Intl.Segmenter,granularity 取 grapheme),代价是本页内联脚本会超出 8 KB 预算,因此没有采用,转而在结果里显式统计不可映射字符。
  • 映射表覆盖的是 ASCII 可打印字符的子集。65 条之外的任何码点(汉字、希腊文、emoji、全角符号等)一律原样保留,不会丢失,也不会报错。
  • 全部计算在浏览器本地完成。文本不发送到任何服务器(可在开发者工具 Network 面板自查),刷新页面即清空,没有历史记录;复制功能依赖剪贴板 API,权限被拒时会给出具体提示而不是静默失败。

常见问题

为什么我输入中文,翻转后还是汉字?

因为汉字没有 180 度旋转字形。CJK 统一表意文字 U+4E00–U+9FFF 的 20992 个码位里,没有任何一个被 Unicode 定义为旋转形态,所以本页只能把汉字原样保留、连同整串一起反序。结果是「界世好你」这种顺序倒过来的原字,而不是「倒着的汉」。这类输入的可映射率通常会掉到 30% 以下,页面会用「不可映射字符数」把这个事实显示出来。

为什么大写字母基本没变?

A–Z 26 个大写字母里只有 5 个有对应的旋转字形:Ⅎ(U+2132)、ℭ(U+212D)、ℌ(U+210C)、ℨ(U+2128)、ℊ(U+210A),覆盖率仅 5 ÷ 26 = 19.23%。其余 21 个大写字母在 Unicode 里根本没有旋转形态,只能原样保留。所以一段「HELLO WORLD」翻转后字形几乎不变,能看到的只有顺序被反转。想要更明显的翻转效果,输入时把小写字母作为主体。

上下颠倒和「倒序」是同一个东西吗?

不是。倒序只把字符顺序反转、字形完全不动,那是文本倒序工具;上下颠倒既要替换成旋转字形,又要反转顺序,两步缺一不可。同一段文字在两个工具里结果不同,正是因为一个只管顺序、一个连字形一起换。判断你要哪一个的最快办法是:如果希望输出里出现 ɐ ɔ ǝ 这类字形,就用本页;如果希望字符集完全不变,就用倒序工具。

为什么 1 翻过去是 Ɩ,翻回来却不是 1?

因为数字 1 的旋转字形是 Ɩ(U+0196),而 Ɩ 再旋转一次得到的字形是字母 I,并不在数字映射表里,所以 1 是单向的、无法在数字内部往返。数字里唯一互为旋转对的是 6 与 9:6→9→6、9→6→9 都成立;0 与 8 旋转后字形本身就是自己。凡是需要「翻过去再翻回来」的场景,只对 6、9、0、8 安全。

为什么 emoji 会变成方块?

如果按 UTF-16 码元切分,一个 emoji 常由一对代理项组成,被 split('') 劈开后就剩两个孤立代理项,浏览器渲染成方块或问号。本页用 Array.from 按码点迭代,所以不会出现这个问题——但注意,即使按码点,ZWJ 序列(如由多个码点拼成的家庭 emoji)仍会在反序时被打散,因为码点不是最小的「用户感知字符」单位。

翻转后的结果能粘到哪里?

几乎所有接受纯文本的地方:社交平台昵称与简介、帖子正文、聊天消息、文档标题、文件名。因为输出是普通 Unicode 字符而非图片或富文本,不依赖字体之外的任何技术。唯一要留意的是对方系统对特殊字符的过滤策略,个别平台会限制显示非 ASCII 字符,这时结果可能被截断或替换成方框,与工具本身无关。

2000 个码点的上限是怎么定的?

这是一个「够用且不失控」的值。翻转 2000 个码点实测约 0.07 毫秒,算力远不是限制;真正的原因是超长文本会让结果框滚动变得难以阅读,也让复制、粘贴的体验变差。超过 2000 时页面直接报错并给出当前码点数,而不是悄悄截断——截断会让用户以为得到的是完整结果,反而更糟。

这种旋转文字能用来做 SEO 吗?

不能。翻转后的字符虽然看起来像原词,但码点已经完全不同,搜索引擎看到的是 ɐ ɔ ǝ 这些独立字符,而不是你想要的英文单词,它既不会被当作关键词收录,还可能被视为乱码。正确做法是把旋转文字留给纯装饰场景(昵称、标题美化),正文关键词仍用正常字符书写。

相关工具