关于 文本工作台
文本工作台是一个处理纯文本的双面板工作区:左边源码编辑器里输入或粘贴,右边结果随着你在菜单栏里组合各种变换实时更新。面板上方的计数器会一直显示字符数、非空白字符数、词数、行数和 UTF-8 字节数。它有意只处理纯文本——这里没有字体、颜色和样式,也就没有东西会在转手时丢失。
工作台胜过一堆单一用途转换器的地方,在于变换可以组合,且组合顺序固定:先书写格式,再行首行尾编辑,接着行排序,最后应用换行符设置。这个顺序值得记牢:你加的前缀不会被大小写转换影响,因为转换已经跑完了;排序看到的是加过前缀的行,不是原始行。变换链给出的意外结果,绝大多数其实是对这个顺序的意外。
如何使用这个开发者工具
- 把纯文本粘贴或输入到源码编辑器。计数器和结果面板会一起更新,没有运行按钮。
- 打开「变换」菜单选择书写格式:小写、大写、句首大写、标题式、camelCase、PascalCase、snake_case、常量式、kebab-case、COBOL 式、Train 式、大小写互换、交替大小写、反向交替,以及随机大小写。
- 其余功能在「行」菜单里:行排序、换行符,以及给每一行添加或删除字面字符串的行首、行尾编辑器。
- 边改边读结果面板。每次改动菜单,整条链都会从原始源码重新执行,因此效果不会叠加,任何一步都能单独撤回。
- 用结果面板上的按钮复制结果;或者用「编辑」菜单里的「清空」,一次性重置文本和全部设置。
实例:一次跑完三种变换
一列字段名要变成 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 | 丢弃 |
| camelCase | parseHttpResponseV2 | 丢弃 |
| PascalCase | ParseHttpResponseV2 | 丢弃 |
| snake_case | parse_http_response_v2 | 丢弃 |
| 常量式 | PARSE_HTTP_RESPONSE_V2 | 丢弃 |
| kebab-case | parse-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 的文件更适合交给命令行工具。