跳到主要内容
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。

默认是“自动”,也就是沿用原来的猜测,所以对一份本来就读得对的文件打开这一页不会改变任何东西。选了具体编码,文件就按那种编码读入,而且发生在解析字幕之前——所以错误的猜测不会先被写成字幕文本。有一次选择看起来什么都没变却很重要:浏览器里 ISO-8859-1 与自动到达同一张码表,但点名它会覆盖猜测——一份西欧文件的字节恰好构成合法 UTF-8 序列时,自动会按 UTF-8 读,出来的字符其实不是文件里的字符。

两点要提前知道,页面都会报告。选错看起来就像选错:符号变成另一批符号,试错不会损坏文件,磁盘上的原件不动。另一点是浏览器的实际限制:它能读的编码不一定能写——按 Shift-JIS、GBK、Big5、EUC-KR 修好的文件会写成 UTF-8,到处都能正确显示,也是现代工具预期的;如果你点名的那种编码是下游硬性要求,修好后还得用桌面工具转一次。文件不上传,12 种格式都接受。

示例

同一份文件按 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。判断不了就挨个试:错的给符号、对的给文字,几秒钟就能认出来。

选错编码会更糟吗?

只会换成另一批错符号,别的什么都不会发生——磁盘上的原件不动,也没有东西被上传或保存,重试是免费的。唯一要留意的是读对了却在开头多出一长串符号,那说明文件还带着 BOM,被选中的编码当成了普通字符。

修好之后为什么写成 UTF-8,而不是我选的 Shift-JIS?

因为浏览器能读那种编码却写不了。按 Shift-JIS、GBK、Big5 或 EUC-KR 读入的文件会写成 UTF-8,它能装下全部字符,也是当前几乎所有软件都认的。字幕文字就是栏里看到的那样,换的只是容器。

ISO-8859-1 和自动识别有什么区别?

在浏览器里两者到达同一张码表,区别在于点名 ISO-8859-1 会覆盖猜测。西欧文件的字节恰好构成合法 UTF-8 时,自动按 UTF-8 读、字符就错了;点名 8859-1 强制按西欧读,字符才是文件里的那些。

修复编码会改动字幕文字吗?

不会改字节,也不增删或替换任何字符;变的是“把字节变成文字”的规则,之后每一步都用正确的文字工作。cue 编号、时间码与换行仍是文件自己的,与其它操作页一致。

相关工具