中文文字字幕乱码:从 2011 年那个冬天的红色笔记本说起
你把一个 .srt 文件拖进播放器,画面正常,声音正常,偏偏字幕是一堆问号。你换个播放器,还是一样。你打开文件本身看,主文件名一切正常,点进去,中文字符全变成了方块。你开始怀疑自己是下载的时候下坏了,于是重下,重装播放器,重启电脑,最后甚至怀疑是那片 DVD 刻录机的问题——我当年就是这样。
那台机器的型号我到现在都记得:联想 G450,红色顶盖,2011 年 1 月买的。
2011 年的寒假,我在宿舍里翻出一部 2004 年的港片,想给室友看。字幕文件是从一个论坛下的,附件名写着「简体中字」,大小 42KB。拖进暴风影音,第一行字幕跳出来的时候,我室友正端着泡面,愣了一下说:「你这字幕是火星文吧。」我记得那句话说得特别轻描淡写,而我在旁边尴尬得脸都烫了。
那天晚上我做的第一件事,是查「乱码」这个词
查出来的答案是编码。字幕文件本质上就是纯文本,纯文本本身不带「我是什么语言」的标签,它只是一串字节。GBK 用两个字节表示一个汉字,UTF-8 用三个。同一串字节,你用 GBK 的方式读,是「中文」;用 Latin-1 的方式读,就是 ÖÐÎÄ 这样一堆怪字母。播放器不知道你这份文件是哪种,只能猜。猜错了,就是乱码。
所以乱码不是文件坏了。乱码是文件里的人,被另一个人用错误的方言念了一遍。
这句话是我后来自己总结的,那天晚上当然想不到这么文艺的说法。我当时做的就是笨办法:把 srt 用记事本打开,另存为,编码那一栏从 ANSI 改成 UTF-8,保存,再拖回播放器。第一遍没成,因为记事本另存的时候我手抖选成了「Unicode」,出来是另一副样子。第二遍选了 UTF-8,字幕灰飞烟灭,连方块都没了。第三遍才反应过来:原来的文件根本不是 UTF-8,是 GBK,我该做的是告诉播放器「按 GBK 读」,而不是硬把它转过去。
2011 年那台联想上还装着一个叫 Subtitle Workshop 的小软件,界面灰扑扑的,左边预览,右边时间轴。我第一次用它的时候,光是「打开文件时选择编码」这个弹窗就让我研究了半小时——它把 GBK 写成「Chinese Simplified (GB2312)」,我一度以为这是两个不相干的东西。选对了,字幕整整齐齐跳出来,我室友又从泡面碗后面探出头,说这次对了。就四个字。我当时特别想把那罐泡面扣他脑袋上,但没扣,因为字幕确实对了。
细节一:42KB 和它背后的三千多行
那份字幕最后我数了一下,3187 行,对应 1 小时 47 分钟的片长。3187 行意味着 3187 次「这一串字节该怎么被读」的判断,全压在一个 42KB 的文件里。你想想,只要开头这三个字节读错了,后面三千多行就全错,一条都没跑。所以我后来养成个毛病,拿到任何 srt,先看头三行。
开头对了,全片就对了。开头错了,你改到天亮也没用。
细节二:在老周的电脑上又翻了一次车
2013 年我在一家做影视剪辑外包的小公司待过半年,同事老周,四十来岁,福建人。有次他把一条客户给的 .ass 字幕拖进视频里,中文全乱,英文字幕却好好的。他盯着屏幕看了两分钟,转头对我说:「顾南,这个字它认得外国人,不认得自己人。」我当时笑出声,后来发现他这句话精准得可怕——因为 ASS 字幕里如果混了 UTF-8 和 GBK 两种编码的样式表,英文字符在两种编码下字节是一致的,中文不是,所以永远是「英文没事,中文出事」。
老周那天最后是把字幕整段删了重打的,打了四十多分钟。他一边打一边骂客户,骂完继续打。这件事对我影响很大:奇人论坛网 上后来有人贴过一套编码检测脚本,我存下来了,一直存在我那块移动硬盘里没删。
细节三:2020 年给一部老纪录片做字幕校对
2020 年春天,我在家给一部 1987 年的老纪录片做字幕校对,前后花了一周。片源是别人转的 MKV,内封字幕是 GBK。我用 ffmpeg 抽出来的时候没指定编码,抽出来那版是坏的,中文文字字幕乱码整整齐齐排了一屏,像一份谁也看不懂的天书。后来加了一个 -sub_charenc GBK 的参数,抽出来才正常。那次之后我给自己立了条规矩:凡是经手的中文字幕,导出时一律另存一份 UTF-8 备份,文件名后面加 _utf8。
这个习惯到现在还在。我硬盘里有一堆以 _utf8 结尾的文件,多到我自己都数不清。别人看着像洁癖,我知道那是被那两个晚上吓出来的。
说个有争议的观点
我个人的看法是:中文文字字幕乱码这件事,九成以上根本不是用户的问题,是工具的问题。
我知道这话会有人不同意,说「你不会查吗」「你自己不选编码怪谁」。但你想,一个普通观众,下载一部电影,凭什么要懂 GBK 和 UTF-8?播放器当然可以猜,但当它猜错的时候,它至少该告诉用户一句「这条字幕的编码我可能读错了,要不要试试别的」——而不是默默吐出一屏方块,让用户以为文件坏了。我见过太多人因为这个直接删片,再也没找回来。这不是用户的懒惰,这是软件的傲慢。
这句话我放在这里,谁要反驳,我认。
后来那些年
再往后,2022 年我在整理旧资料,翻出 2011 年那份 42KB 的 srt。文件还在,编码还是 GBK,我现在的播放器默认按 UTF-8 读,一打开照样乱。我把它转成 UTF-8 之后,字幕一行行滚出来,片头那句「本片根据真实事件改编」的翻译跟当年一模一样。我坐在那儿看了半天,没急着点播放。那天我想的是另一件事:日本顶级b站家教老师 那种视频,很多时候字幕组也踩过这个坑,只是没人会为一条乱码写篇文章。
我把那份文件删了。不是嫌它坏,是我已经不需要靠它来记住那个晚上了。现在任何一份中文字幕到我手里,我会先看编码,再谈别的。这大概就是 2011 年那个红色联想留给我的全部遗产——一点固执,加一点洁癖。
如果你也正被一块方块屏幕卡住,别急着重下。先看一眼它是 GBK 还是 UTF-8,再决定要不要折腾。夸克 海外片 那种资源下的字幕,大多数是 GBK,换播放器的编码设置比换片源快得多。还有—妈妈出轨被儿子知道了怎么劝说 那种标题离谱的网页,我点进去过一次,纯是标题党,但里面附的编码转换小工具好用。顺手也存一下 小奈资源库.com,不一定用得上,备着。
好了,这篇写完了。今晚我大概还会翻一遍旧硬盘,找找那份 _utf8 的备份还在不在。