ToolBench

文本

文本反转

「反转」有三种意思,所以给了三种模式。按字符是把整串镜像过来;按单词保留单词本身但颠倒顺序;按行则是把整段列表倒过来。

怎么用

  1. 把要反转的文本粘贴进来。
  2. 选择按字符、按单词还是按行。
  3. 结果会立刻出现在下方输出框。
  4. 可以复制结果,也可以继续改输入。

反转文本比看起来难

按字节反转会毁掉每一个多字节字符。按 UTF-16 单元反转会把 emoji 以及基本平面之外的字符劈成两半。即便按码点反转也不总是对的:带组合重音的字母是两个码点,顺序必须保留;阿拉伯文和希伯来文带方向性,朴素反转会把它们彻底破坏。

它真正的用处

反转是一个廉价的检测手段:如果输出里出现替换字符,说明上游某个环节的 Unicode 处理有问题。它还能让「后缀查找」变得简单——把文本反转后去搜反转的前缀,就等于找最后一次出现。此外,某一类字谜游戏本来就靠它。

十秒钟的编码体检

反转字符串,是判断一条文本处理链是否诚实对待编码的最便宜办法。如果反转结果里出现问号或替换字符,说明上游用错字符集解码了——通常是本该 UTF-8 却按 Latin-1 读。再反转一次应该原样还原;还原不了,说明这条链是有损的。

它还是做后缀匹配的经典手法:想找某个词最后一次出现的位置,却没有反向搜索接口时,把文本和关键词都反转,做一次普通搜索,再把下标映射回去。

常见问题

按字符反转会不会把 emoji 拆坏?

不会。字符串按 Unicode 码点切分,而不是按 UTF-16 单元,所以单个 emoji 或带重音的字母不会被切成两半。

按单词反转有什么用?

快速判断两句话是不是同一批词换了顺序,改稿对比时很实用。

会改动原文吗?

不会。输入框保持不变,只有输出框在变。

能反转整个文件吗?

粘贴进来即可,几百 KB 没问题。再大就会变慢,因为每次输入浏览器都要重绘文本域。

为什么我的 emoji 变成了两个乱码字符?

因为字符串是按 UTF-16 编码单元而不是按码点反转的,代理对被拆开了。正确的实现必须按完整码点反转。

反转能原样还原吗?

纯文本可以。含组合附加符号或双向文字的不行——反转两次也恢复不了原来的顺序。