文件没坏,是读错了
字幕文件里存的是字节。要把字节变成字,必须知道它按什么编码写的 —— 这一步选错了,出来的就是乱码。文件本身一个字节没少,换一种编码再读一次,字就回来了。
所以乱码分两件事:认出它原本是什么编码,和存成播放器认得出的编码。前者靠试读打分,后者靠另存。两件事修的是不同的问题。
五种长相,五种成因
乱码不是随机长出来的,它的长相直接暴露了成因:
- 成片带音标的字母(`ä½ å¥½`):UTF-8 的中文被当成单字节编码读了 —— 中文在 UTF-8 里三字节一个字,单字节读会把每个字节各当成一个字母
- 汉字连成片却没有一个常用字(`浣犲ソ`):UTF-8 被当成 GBK 读了 —— 两字节一组重新配对,配出来的都是生僻字
- 一堆货币符号、数学符号:字节落到了符号区,常见于被当成 Mac 罗马或 Latin-1 系读
- 混进控制字符:字节落进了不可见的控制区,屏幕上表现为空白或方块
- 方框问号 `�`:这是替换字符,不是乱码 —— 它表示「这儿原本有个字,但读的时候已经丢了」

替换字符为什么修不回
替换字符是关键分界线。出现 `�` 说明在更早的那一步(通常是某个程序把它读了一遍又存了一遍)字节就已经被丢掉了,丢掉的部分没有任何记录。这时候倒推没有依据 —— 谁也修不回来。
所以修复页面会分两种情形处理:传文件时原始字节还在,可以逐个编码试读;粘贴进来的内容里若已经出现替换字符,就直说「修不回来,请上传原始文件」。
顺带一个反过来的情形:内容读起来完全正常,播放器里却还是乱码。这不是文件的错,是播放器按错了编码。改文件没有用,另存一份带 BOM 的 UTF-8 或 GBK 交给它就行。

修的时候在比什么
工具把每种可能的编码都试一遍,然后给每份结果打分:常用字占多少、有没有成串的音标、有没有成串的符号、汉字是不是连片生僻。分数最高的那份排在最前面。
分数没有明显更好就不推荐 —— 宁可告诉你「这份读起来是正常的」,也不拿一个勉强像人话的结果糊弄你。被人连错两次的(存错一次、又修错一次),会对头几个候选再倒推一层。

存对编码才算完
修完的文本还要存成播放器认得出的编码。Windows 上的播放器常常靠 BOM 认编码,存一份带 BOM 的 UTF-8 最省事;老设备或国产播放器认 GBK。可选编码:UTF-8、UTF-8(带 BOM)、GBK、Big5、Shift_JIS、EUC-KR;装不下会提示换一种(比如 GBK 装不下韩文)。

相关工具与指南
完整操作见 乱码修复怎么用;SRT 文件里到底存了什么见 SRT 文件里写了什么;编码正常但内容脏(水印广告、听障提示)用 字幕清洗。