文本工作台

在一个专注的工作区编辑纯文本并组合处理。

正在加载工具…

关于 文本工作台

文本工作台是一个处理纯文本的双面板工作区:左边源码编辑器里输入或粘贴,右边结果随着你在菜单栏里组合各种变换实时更新。面板上方的计数器会一直显示字符数、非空白字符数、词数、行数和 UTF-8 字节数。它有意只处理纯文本——这里没有字体、颜色和样式,也就没有东西会在转手时丢失。

工作台胜过一堆单一用途转换器的地方,在于变换可以组合,且组合顺序固定:先书写格式,再行首行尾编辑,接着行排序,最后应用换行符设置。这个顺序值得记牢:你加的前缀不会被大小写转换影响,因为转换已经跑完了;排序看到的是加过前缀的行,不是原始行。变换链给出的意外结果,绝大多数其实是对这个顺序的意外。

如何使用这个开发者工具

  1. 把纯文本粘贴或输入到源码编辑器。计数器和结果面板会一起更新,没有运行按钮。
  2. 打开「变换」菜单选择书写格式:小写、大写、句首大写、标题式、camelCase、PascalCase、snake_case、常量式、kebab-case、COBOL 式、Train 式、大小写互换、交替大小写、反向交替,以及随机大小写。
  3. 其余功能在「行」菜单里:行排序、换行符,以及给每一行添加或删除字面字符串的行首、行尾编辑器。
  4. 边改边读结果面板。每次改动菜单,整条链都会从原始源码重新执行,因此效果不会叠加,任何一步都能单独撤回。
  5. 用结果面板上的按钮复制结果;或者用「编辑」菜单里的「清空」,一次性重置文本和全部设置。

实例:一次跑完三种变换

一列字段名要变成 camelCase 标识符,每行加上 Markdown 列表前缀,并按字母序排列。把书写格式设为 camelCase,把行首编辑器设为添加「- 」这两个字符,把行排序设为升序。

源文本
order total
user id
created at
结果
- createdAt
- orderTotal
- userId

这段源文本的计数器读数是:30 字符、25 非空白字符、6 词、3 行、30 字节。操作顺序在输出里清晰可见:前缀是在大小写转换之后加的,所以短横线和空格没有被并进标识符;排序是在加前缀之后跑的,所以它比较的是已经带前缀的行。

全部书写格式,用同一行样本演示

样本是「parse HTTP response (v2)」。这些格式分成两族:按词重建整行的那一族,会在过程中丢掉标点和分隔符;逐字符映射的那一族,则一个字符都不少。

格式结果标点
小写parse http response (v2)保留
大写PARSE HTTP RESPONSE (V2)保留
句首大写Parse http response (v2)保留
标题式Parse Http Response V2丢弃
camelCaseparseHttpResponseV2丢弃
PascalCaseParseHttpResponseV2丢弃
snake_caseparse_http_response_v2丢弃
常量式PARSE_HTTP_RESPONSE_V2丢弃
kebab-caseparse-http-response-v2丢弃
COBOL 式PARSE-HTTP-RESPONSE-V2丢弃
Train 式Parse-Http-Response-V2丢弃
大小写互换PARSE http RESPONSE (V2)保留
交替大小写pArSe hTtP ReSpOnSe (V2)保留
反向交替PaRsE HtTp rEsPoNsE (v2)保留
随机大小写不可复现,取自安全随机源保留

常见问题排查

标题式把标点吃掉了,还把缩写拆开了。

成因 标题式、camel、Pascal、snake、常量、kebab、COBOL 和 Train 这几种格式,都是按词重建整行的,而词边界是「既不是字母也不是数字」的任意字符。所以撇号也是边界,被它隔开的标点更是无处安放。

解决办法 请预期「hello, world! it's here.」会变成「Hello World It S Here」。想要大写效果又不丢标点,请用句首大写:它先把整行转小写,再在句号、问号、感叹号之后大写首字母,其余一概不动。

缩写在 snake 或 kebab 格式里粘成了一串小写。

成因 词切分是在「小写字母或数字之后紧跟大写字母」的位置插入边界。连续的大写串内部没有这样的边界,所以 parseHTTPResponse 被读成两个词而不是三个。

解决办法 请预期 parseHTTPResponse 会变成 parse_httpresponse。转换前先在缩写处加一个空格或下划线——写成 parse HTTP Response 就没问题——或者转换之后手工修正那几个受影响的标识符。

换行符设成了「保持」,输出却用了 Windows 换行。

成因 「保持」会检查原始源码,然后为整份文档选定一种分隔符。只要源码里存在哪怕一处 CRLF,结果里的每一行都会用 CRLF。

解决办法 这通常正是你要的,因为混合换行的文件几乎总是失误造成的。目标环境严格时请明确选择 LF 或 CRLF,比如绝不能带回车符的 Shell 脚本。

排序把 item100 排在了 item9 前面,字符数和字节数也对不上。

成因 行排序使用的是区域感知的字符串比较,它不认识嵌在字符串里的数字,所以 item1、item10、item100、item9 就是正确的字符串顺序。另一方面,计数器把字符按 Unicode 码点计、把字节按 UTF-8 编码计,因此只要有非 ASCII 文本,两个数字就会分叉。

解决办法 需要数值顺序时,排序前先把数字后缀补零对齐。至于计数,记住这个关系就够了:带重音的「naive cafe」加一个火箭 emoji 是 12 个字符、17 个字节,而数据库字段长度限制看的是字节那个数。

适合用这个工具的场景

  • 把一列字段名、标题或表格单元格,统一转成同一种命名风格的标识符。
  • 为粘到别处做准备:一次完成排序、给每行加项目符号或引用标记、统一换行符。
  • 核对一个值是否超出长度限制——数据库真正卡的是字节数,不是字符数。
  • 从粘贴进来的整块内容里,逐行剥掉重复的前缀,比如缩进、日志时间戳标记或注释符。

应该换用别的工具的场景

  • 查找替换,或任何按模式的编辑。行首行尾编辑器只在行的开头或结尾做字面匹配;模式与替换请交给正则表达式测试器。
  • 比较两份文本。请用文本比较与差异检查器,它展示版本之间的改动,而不是变换其中一份。
  • 给列表去重。这里没有去重选项;把列表粘进列表比较工具、第二个面板留空,第一份结果就是去重后的集合。

隐私与数据处理

一切都在当前浏览器标签页内运行。文本绝不上传,计数、变换和排序全部本地执行;超大文档交给同一标签页内的后台 Worker,而不是服务器。内容不跨访问保存,刷新即丢失源码。乱序和随机大小写取自浏览器的密码学随机源,因此这两种结果无法复现。

相关开发者工具

常见问题

这些变换按什么顺序执行?

先书写格式,再行首行尾编辑,然后行排序,最后换行符转换。每次改动都会从原始源码重新执行整条链,因此设置永远不会层层叠加,去掉某一步就能精确恢复到它之前的状态。

为什么中文或日文的词数看起来不对?

词的定义是「字母、数字、下划线、撇号、连字符的连续片段」。汉字属于字母,所以中间不带空格的一串汉字算作一个词——一句七个字的短语只记为 1。这段文本的字符数和字节数仍然是准确的。

为什么「don't re-run」算两个词?

撇号和连字符都被当作词内字符,因此都不会切断所在的词。这与英文正文的计数习惯一致,也是与大小写转换所用的词切分之间一处刻意的差别——在那边,这两个字符都是边界。

字符数和字节数有什么区别?

字符数按 Unicode 码点计,所以一个 emoji 只算一个,尽管它内部占两个 UTF-16 单元。字节数按 UTF-8 编码计:ASCII 字符一字节,带重音的拉丁字母两字节,汉字三字节。数据库长度限制和 HTTP 头几乎总是按字节规定的。

能撤销某个变换吗?

把对应的菜单项调回「不变」即可,结果会从未经改动的源码重新构建,根本不需要撤销。源码编辑器始终保留你粘贴进来的原文,只有结果面板体现变换。

为什么乱序和随机大小写无法复现?

两者都取自浏览器的密码学随机源,没有可复用的随机种子。想留住某个结果,请在改动其他设置之前先复制下来,因为重跑一次会得到不同的排列。

工作台能处理很大的文件吗?

文本超过约 25 万字符后,计数和排序会切到后台 Worker,以保证编辑器不卡顿。但整份文档仍然驻留在这个标签页的内存里,因此几十 MB 的文件更适合交给命令行工具。