跳至主要內容
SubtitleMatrix

字幕亂碼編碼修復

文字樣式修正編碼與 BOM
或者貼上字幕文字

選項

這一項改的是檔案的讀取方式,不是寫出的內容。正常情況下,編碼由開頭幾個位元組推斷:有 BOM 就用 BOM,檔案是合法 UTF-8 就用 UTF-8,否則用 Windows-1252。這樣西歐檔案能讀對,其他全都讀錯,所以日文、中文、韓文或西里爾文檔案會變成滿畫面的奇怪重音字元。在這裡指定編碼即可跳過猜測。預設的 自動偵測 什麼都不做,所以放著不管最安全。注意結果會以 UTF-8 寫回:瀏覽器只能產出少數幾種編碼,這個清單裡的都不在其中。這正是這一頁的意義 —— 文字被正確還原,並成為任何工具都讀得懂的格式。

時間以哪個影格率計算。在格式頁面上,這是 MicroDVD 需要的值,因為它把時間存成影格編號。在影格率頁面上,它是檔案當初對應的速率 —— 字幕是照這個版本製作的 —— 而頁面的第二個欄位填你要搭配的影片速率。常見的有 23.976、24、25、29.97、30、50、59.94 和 60。填錯會讓整條時間軸位移;在影格率頁面上,位移是按比例發生,而不是固定的量。

有些字幕檔打開是一整片不屬於任何語言的符號。檔案沒壞,文字也沒丟:讀它的程式對位元組套用了錯誤的規則,出來的其實是那些位元組在另一套規則下的意思。這一頁讓你指定用哪套規則,而且在對檔案做任何其他處理之前就套用它。

需要由你來指定,是因為位元組通常不會自己說。程式打開字幕檔時是在猜:開頭有標記就照標記、是合法 UTF-8 就當 UTF-8,否則退到別的東西——常見的做法是退到執行工具那台機器的本地代碼頁,而寫檔案的是另一台機器。日文、韓文、中文字幕是最容易猜錯的情況,因為產生它們的機器上那些編碼就是預設,而那些位元組不是合法 UTF-8。知道檔案是哪個程式寫的人,知道得比猜測者多,這一頁就是放這份知識的地方。

預設是「自動」,也就是沿用原本的猜測,所以對一份本來就讀得正確的檔案打開這一頁,什麼都不會改變。選了具體編碼,檔案就按那種編碼讀入,而且發生在解析字幕之前——所以這一頁沒有通常意義上的「套用」步驟;一份讀得正確的檔案也可能同樣的字幕、時間碼與換行,出來卻是完全不同的一組字元。你選的是讀法,不是編輯。

關於結果有兩件事值得預先知道,頁面兩件都會報告。第一,選錯看起來就像選錯:符號變成另一批符號,而不是變成文字,試錯不會損壞檔案。第二是瀏覽器真正的限制:它讀得出來的編碼,不一定寫得回去。以 Shift-JIS、GBK、Big5 或 EUC-KR 修好的檔案,會以 UTF-8 寫出——到處都能正確顯示,也是現代工具預期的——但那不是你點名的編碼;如果下游系統硬性要求原編碼,就在這裡修好後再用桌面工具轉一次。

清單裡有一項值得單獨說明。ISO-8859-1 與自動在瀏覽器裡到達同一張碼表,因為標準規定那個標籤就是西歐那一套。它仍然值得存在,因為它能做一件自動做不到的事:推翻猜測。一份西歐檔案的位元組恰好構成合法 UTF-8 序列時,自動會把它讀成 UTF-8,你看到的字元就不是檔案裡的;點名 ISO-8859-1 會強制採西歐讀法。12 種字幕格式都接受,檔案不上傳——讀入與寫出都在你的瀏覽器裡。

範例

對本來就讀得正確的檔案做自動偵測

輸入

1
00:00:01,000 --> 00:00:02,000
The room is dark.

2
00:00:03,000 --> 00:00:04,000
A cold night.

輸出

1
00:00:01,000 --> 00:00:02,000
The room is dark.

2
00:00:03,000 --> 00:00:04,000
A cold night.

預設設定,也是唯一什麼都不要求的設定:選自動時沒有點名任何編碼,所以檔案讀法跟這一頁存在之前一樣。這讓它可以安全地用在你沒把握的檔案上——本來就沒錯,就什麼都不會發生——也是具體選擇把事情弄糟時的退路。

同一份檔案以 Shift-JIS 讀入

輸入

1
00:00:01,000 --> 00:00:02,000
こんにちは、いい天気ですね。

輸出

1
00:00:01,000 --> 00:00:02,000
こんにちは、いい天気ですね。

同一份檔案的兩種讀法。位元組按 Shift-JIS 讀進來之後,欄裡裝的是它們一直想說的日文;按西歐文字讀,同樣的位元組是一行不相干的重音字母,而那個狀態正是讓人來找這一頁的原因。這個例子的兩欄都顯示可讀的版本,因為重新讀入發生在解析字幕之前——這一頁沒有哪個步驟是畫面上錯字、而正確的字不在。

被自動偵測讀成 UTF-8 的西歐檔案

輸入

1
00:00:01,000 --> 00:00:02,000
Café Ã la carte

輸出

1
00:00:01,000 --> 00:00:02,000
Café Ã la carte

最難的情況,也是瀏覽器裡自動與點名編碼唯一會分歧的一種。檔案的位元組恰好構成合法 UTF-8 序列,所以猜測是 UTF-8,交出來的字元卻不是檔案裡的。點名 ISO-8859-1 會強制採西歐讀法。兩者其實是同一張碼表,這也是舊文件最容易弄錯的地方:這個選擇做的是推翻猜測。

常見問題

字幕檔顯示成一堆亂碼,是檔案壞了嗎?

不是,是位元組被錯誤的規則讀了。檔案裡是日文、韓文或西里爾文字,用寫出它的程式所用的編碼存著,而讀它的程式假設了別的東西——很常見的是那台機器的本地代碼頁,而不是檔案本身。什麼都沒損壞:同樣的位元組套上正確規則就是正確的文字,而這正是這一頁點名編碼時做的事。

要怎麼判斷字幕檔真正是什麼編碼?

通常從它是什麼產生的來判斷。日文 Windows 工具產生的日文檔最可能是 Shift-JIS,中國大陸產生的中文檔是 GBK、台灣是 Big5,韓文是 EUC-KR,西里爾文多數時候是 Windows-1251。再不然就逐一試:錯的選擇給出符號、對的給出文字,所以幾秒內就能辨識一份檔案,不必事先知道任何事。

選錯編碼會讓字幕檔更糟嗎?

字元會變成另一組錯字,其他什麼都不會發生——磁碟上的原檔沒被碰過,也沒有上傳或存到任何地方。再試一次代價是零。唯一要留意的是讀得正確、但頂端卻有一行長得可疑的符號,那表示它還帶著一個標記,而被選的編碼把它讀成字元了。

修好之後為什麼寫成 UTF-8,而不是我選的 Shift-JIS?

因為瀏覽器讀得出來那種編碼,卻寫不回去。以 Shift-JIS、GBK、Big5 或 EUC-KR 讀入的檔案會以 UTF-8 寫出,它能裝下檔案裡的每個字元,也是幾乎所有現行軟體預期的。字幕文字就是你在欄裡看到的東西,變的只有容器。如果下游系統要求原編碼,請用桌面工具轉換修好的檔案。

修復字幕編碼會改動字幕文字嗎?

不會。檔案的位元組沒有被改變,也沒有任何字元被新增、刪除或取代;變的是把位元組轉成文字所用的規則,而那個步驟之後的一切都使用正確的文字。字幕編號、時間碼與換行都是檔案自己的,跟本站其他操作頁一樣。

自動編碼偵測夠用嗎,還是每次都該自己指定?

絕大多數檔案用自動就對,而它之所以是預設,是因為讀得正確的檔案不該需要你多說什麼。當文字明顯不對、你知道檔案是什麼產生的、或一批檔案來自同一來源且應以同一種方式讀取時,再指定編碼。有一種情況它幫不上忙:瀏覽器完全沒有解碼器的編碼,那種檔案不管你選哪個選項都還是錯的。

相關工具