檔案沒壞,是讀錯了
字幕檔案裡存的是位元組。要把位元組變成字,必須知道它按什麼編碼寫的 —— 這一步選錯了,出來的就是亂碼。檔案本身一個位元組沒少,換一種編碼再讀一次,字就回來了。
所以亂碼分兩件事:認出它原本是什麼編碼,和存成播放器認得出的編碼。前者靠試讀打分,後者靠另存。兩件事修的是不同的問題。
五種長相,五種成因
亂碼不是隨機長出來的,它的長相直接暴露了成因:
- 成片帶音標的字母(`ä½ å¥½`):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 檔案裡寫了什麼;編碼正常但內容髒(水印廣告、聽障提示)用 字幕清洗。