Python vs. Unicode:两个Python下的输出Unicode字符问题的解决方案

前几天开始自学Python,这语言确实看上去很简练外加高度抽象,但是对Unicode字符串的处理简直要让人发疯。

长篇大论讲这个问题的在网上随便一搜“Python 中文”就有,我这里只想特别讲讲今天遇到的两个问题和解决方案。


2.X Python官方IDLE的BUG

2.X官方的IDLE有个很严重的BUG:即使你显式定义一个Unicode字符(准确地说是对象),他居然也会用系统ANSI编码来存储,而不是Unicode。

>>> import sys
>>> import locale
>>> sys.getdefaultencoding()
'ascii'
>>> locale.getpreferredencoding()
'cp936'
>>> s='中文'
>>> s
'\xd6\xd0\xce\xc4'
>>> u=u'中文'
>>> u
u'\xd6\xd0\xce\xc4'

可以看到,我们的Unicode对象u,实际上却是用了GBK编码,而不是Unicode。len(u)也会因此变成4而不是2。更严重的后果是,你似乎无法还原输出这个字符串的字符本身:

>>> print s
中文
>>> print s.decode('gbk')
中文
>>> print u
ÖÐÎÄ
>>> print u.encode('utf8')
脰脨脦脛
>>> print u.encode('gbk')

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    print u.encode('gbk')
UnicodeEncodeError: 'gbk' codec can't encode character u'\xd6' in position 0: illegal multibyte sequence

可以看到,对于str类型、GBK编码的s可以直接输出,或者显式用GBK解码成Unicode对象后再输出。但是对于我们的u,理论上一个Unicode对象正确的做法是编码成本地locale(GBK)或者utf-8输出,但是很显然都不好使。

那么,既然我们前面说了u被错误地用GBK编码了,那么我们就把他当成str然后用GBK解码行不行呢?

>>> print u.decode('gbk')

Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    print u.decode('gbk')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

答案是否定的。

值得注意的是,这个错误使用Python命令行并不会出现。输入的Unicode中文会逐字符(而不是逐字节)地正确存为Unicode字符串(所以结果是2个字符/对象),输出时既可直接输出(本质上还会被Python先编码成GBK,因为CMD是GBK的),或者自己手动编码成GBK再输出:

QQ截图20150816202253

虽然这是IDLE独有的BUG。但是由于初学者会大量使用IDLE来进行测试,相信会对很多人造成困扰。事实上中文圈有很多文章都提到了IDLE这一BUG:文章1文章2

经过一番搜索,我发现这个BUG对应的报告应该是官方tracker上的issue15809。可怕的是,早在2012年就已经提出,居然过了3年都没有修复。不过幸运的是,已经有人做出patch,相信在不久的将来有修复的可能。

在这篇文章中还无意得知了在当下BUG的情况下的临时解决方案:

>>> u.encode('latin1')
'\xd6\xd0\xce\xc4'
>>> u
u'\xd6\xd0\xce\xc4'
>>> print u.encode('latin1')
中文

没错……就是先用Latin1编码把原代码完全一样地转换成完全对应的str类型,然后再输出(默认GBK解码)。为什么是Latin1?天知道。


用Sublime Text Build Python的编码问题

先说Python 2.x的情况。

其实Python 2.x下如果用控制台,输出个Unicode字符串是蛮简单的。

直接u=u’中文’然后print u就可以了。其实这种做法等效于print u.encode(‘gbk’)——因为Unicode对象存的是字符本身(这只是便于理解的说法,准确地说也是用UTF-16编码),得先编码成byte。而你用简体中文系统的CMD直接隐含了默认编码成gbk了。

但是在Sublime Text里一切就变得很复杂。

还是上面的代码原封不动:

u=u'中文'
print u

输出:
SyntaxError: Non-ASCII character '\xe4' in file C:\Users\Administrator\Desktop\test2.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

什么,你居然敢不声明文件的编码就让老子跑还夹杂非ACSII代码!是在下错了,毕竟不是console不能这么凑乎……老老实实最前面加上# -*- coding: utf-8 -*-

结果:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

这又是为什么?看报错信息可以看出,是python试图用ascii来编码我输入的“中文”,二字,很显然地失败了。但是为什么会用ascii去编码?经过一番搜索,在这篇文章里提到,这里编码的选择和sys.stdout.encoding这一环境变量有关。在控制台下,该值是cp936(GBK);但是在Sublime Text下,该值居然是None。

解决方法是上面提过的,把变量u显式编码成utf-8再输出:

# -*- coding: utf-8 -*-

u=u'中文'

print u.encode('utf-8')

这次终于成功输出“中文”二字了。不过为啥在控制台用gbk这里用utf-8?事实上是,你可以用gbk,但是结果就是编译不会出错但是输出结果是空白。应该是Sublime Text的result输出窗口只支持utf-8码所致。同理,你也可以在控制台里编码成utf-8输出,只是显示出来是乱码而已(因为控制台的是GBK)。

说完2.X+Submine Text的解决方案,再来说说3.X。由于Python 2.X的Unicode支持就是一笔糊涂账,我想了想干脆换用3.X算了反正我也没啥包袱。结果上来就出问题了:

由于3.X默认的字符串就是Unicode的,也没必要再加u了。于是我在Sublime Text 3下随便试了个字符串输出

u='你好'
print (u)

可以编译无问题,但是输出是空的?拿控制台和CMD都试了下,无法重现。看来又是Sublime Text的问题。按照上面的尿性先检查下sys.stdout.encoding:这次不再是None了,是cp936。但是还是不行啊我们上面说了Sublime Text只接受utf-8输出。那再用上面的老方法,把字符串手动编码成utf-8试试?

u='你好'

print(u.encode('utf-8'))

输出:
b'\xe4\xbd\xa0\xe5\xa5\xbd'
[Finished in 0.1s]

不妙,结果直接变成bytes了……这里需要厘清一个概念。Py2和3的print默认期望接受的类型是不一样的。在py2里由于str默认就是bytes,所以如果你输出的是一个Unicode类型的字符串,则需要自动(控制台下)或手动(sublime Text里)先编码成bytes。而这个byte最后又会被你的控制台或者别的什么东西再解码回字符输出(好绕)。py3里反过来了,默认str就是Unicode,所以期望接受一个没编码过的字符本体,如果你编码成byte他反而不理解了,直接把byte原封不动给你输出出来。那么既然我们无法再显式控制这编码成byte的过程,如何让python给我编码成utf-8呢?

答案是,手动修改Sublime Text的build system,修改相应的参数。默认的python build我们是不能用了,因为参数改不了。那么手动去Tools->Build System->New Build System.. 新建一个.sublime-build文件,内容写

{
    "cmd": ["python", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "env": {"PYTHONIOENCODING": "UTF-8"}
}

前面几行是默认的。重点就是env这个参数,他让py把所有的标准输入输出接口的编码方式都改成utf-8。将这个build system保存之后(默认那个users文件夹就好),我们再看看sys.stdout.encoding,是不是就变成utf-8了?

现在,我们可以完美地直接输出字符串’中文’了。

除此之外,还有另外一个修改build system的办法,就是修改encoding参数:

{
    "cmd": ["python", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "encoding": "cp936"
}

和PYTHONIOENCODING不同,这里的encoding控制的是Sublime Text这边接口的编码,粗略可以理解成下方输出栏的解码方式。自然,只要这个和py那边输出的output的编码一致,自然也可以正确地显示出结果。

我个人还是推荐第一种方法,因为毕竟全Unicode的workflow的兼容性更好。另外提示一点,两条参数不能共用,否则结果又会变成乱码(想想为什么)。

顺便一提,在某些网站查到了一种修改env参数中的”LANG”为utf-8或者en_US.UTF-8,我这边并没有作用。不过可能对解决一些别的编码问题有帮助,可以参见此文的附带部分。


总而言之,Python的输出就是这么恶心,各种编码玩死你。一个字符串被翻来覆去编码解码好多回,每个流程都有可能出错。在这个Stackoverflow的答案中建议直接使用sys.stdout.buffer.write(data)os.write(sys.stdout.fileno(), data)来输出数据(要先自行编码成bytes),绕开问题多多的print,也不失为一个好选择。

唉,这种时候就怀念全盘Unicode化的C#的好了。

MediaLink路由器的小故事

昨天没事儿在Amazon闲逛,搜无线路由器的时候惊奇地发现,曾经TOP1的MediaLink路由器居然在前几页都找不到。好奇之余上Google搜索,原来发现MediaLink的背后居然还颇有一段故事。

相信国内应该没人听过MediaLink这个牌子吧?其实我猜美国大概也没多少人知道。但是就在2年前,稳坐“Wirelss router”分类TOP 1的正是旗下的N300路由器。我为什么这么清楚呢?因为我舍友就买了一个(他是属于那种肯定会买Amazon排名第一的产品的家伙)。从质量上来讲,对于当时30多元的价格在美国市场来说算是性价比相当高的。本来我对这种杂牌是嗤之以鼻的,但是实际体验之后,感觉相对于我之前用过的TPLink和思科Linksys的低端货,这款反而靠谱多了,至少这货连续工作几个月不用重启也没死机过。功能也算全,除了一个开启DMZ之后居然用内网IP无法访问路由的槽点以外。

然而质量再好,能在竞争激烈的路由市场杀出一片天,也绝非容易事。而且很奇怪的是,这个品牌的路由基本只有Amazon有售。我曾一度怀疑他其实是Amazon的自有品牌,但是搜了下却发现仅仅是一个建立在New Jersey的小公司:MediaBridge Products。我当时没有深究他成功的原因。

那么为什么2年后的今天,它却完全从Amazon消失不见了呢?用公司的名称稍加搜索,发现原来这家公司还“搞过个大新闻”。它曾经“起诉”亚马逊差评用户,因此引发众怒进而被亚马逊下架了(报道1 2)。起诉打了引号是因为这属于媒体耸人听闻,虽然事实上也好不到哪里去——这篇Opinion里有很详细地来龙去脉以及对该公司某个头头的采访内容(这篇文章写的很不错,相对比较客观,推荐阅读)。

大概来说,就是某个用户在Amazon发了篇对该公司路由的1星review,指责该公司花钱雇人在Amazon上刷5星好评。该公司于是写了封律师信给该用户,要求他撤掉其不实的评论,否则将面临被起诉的风险。这里添加一点反方观点,在对MediaBridge公司的采访中,其代言人Mr. Smith提到,该review根本不是对产品本身的review而是对公司本身的污蔑。而且此review的出现(这篇review曾经被顶到榜首)直接导致公司的销量大幅度下滑了30%。公司采取的行动虽然可能过于“harsh”但是是正当的。

顺便一提,早在2009年就有人说MediaLink路由刷分。有位用户曾提到MediaBridge主动给他寄了个新一代的路由希望他能给5星。MediaBridge公司对此的回应是“该用户曾对我们上一代产品不满,我们此举是对用户的补偿,想借此修复和该用户的关系”。

这件事儿一开始并没有引起太大波澜,但是自从该用户2014年五月在reddit发了一贴并被顶上首页之后(美国贴吧的威力真的不是说着玩的),连锁反应就开始了。随着事情的迅速发酵,作为管理者,Amazon自然不能对这种商家骚扰用户的做法放任不管。其很快采取措施,下架了该公司的所有产品。介于MediaLink品牌本身就是个小牌子外加其产品基本只在亚马逊销售,其后果可想而知。虽然现在公司本身采取了一些补救措施诸如在官网直销等等,但我想现在的销量大概不是“下滑了30%”那么简单了罢。

这种公司和客户的对抗甚至对薄公堂的事儿在今天可以说是屡见不鲜了。虽然舆论普遍都是对大公司的谴责,但也很难说每次都是用户是正义的一方(包括这次的事儿其实也很含糊)。不过无论如何,公司也该了解从公关的角度这种硬邦邦的处理方式的后果永远是灾难性的。尤其在网络时代,各种言论——无论理性的还是非理性的,有证据的还是无证据的——的出现是不可避免的,到了2015年还想用律师信的方式去压制只能说是太幼稚了(史翠珊效应)。

另外一个有趣的事则是这款N300的路由器本身。在上文提到的那篇Opinion中,提到该路由其实是tenda(腾达)的一款路由的贴牌。在著名路由review网站SmallNetBduilder的测评中通过FCC ID的一致证实了这一想法。不过颇具讽刺地是,根据SNB的测评结果,该路由竟是同等价位的N300档路由中性能顶尖的一款。也就是说即使我们假设MediaLink刷分的事儿为真,根据Amazon排名来买这款路由的人其实并没有吃亏,某种意义上还赚到了——很好地规避了网件、思科低端货那些性能可能更差、价格却高的不行的产品。

其实贴牌真的不算多大事儿,如果不是这次的公关灾难,MediaLink说不定能成为美国低端路由市场上(容我再强调一下仅限美国市场…中国的红海没法比)一匹黑马。好吧,他好歹也热卖了2年回本了不是。

故事到此也该告一段落了。不过我又去Amazon专门搜了下MediaLink,发现现在其实又有在销售了(Amazon第一方销售可Prime,应该是取消了对他的ban)。当然,在这次公关危机之后估计MediaLink永远也不可能回到排行榜上了。不过,这款路由现在居然只要17刀,比如今的新TOP 1 (经典的TP-Link WR841N,在国内也是卖了几百年了吧)还要便宜2刀……如果你没有道德洁癖,不失为一个不错的选择哦。

p.s. 刚去京东搜了下,841居然已经淘汰了(新款842,外形更酷炫)而N450的886也只要99rmb……美国人民真的是水深火热

FixCue 1.4.3 发布

下载地址依旧更新在永久发布页了。另外,昨天折腾了一下VisualStudio的版本控制,把源代码放到了GitHub上

Changelog

1.4.3.0

—增加了对无BOM的UTF-8文件的自动识别(感谢health);
—改善了对Win 8以后的版本的添加到右键菜单功能的支持。

废言

上次更新还在2012年……这次主要是发现win 10右键关联坏掉了所以紧急修复一下。主要原因是因为之前用硬代码写了只有NT 6.1才会操作(汗)。另外自己算是第一次用非Administrator的电脑,发现原来关联一直都有权限的问题……于是增加了个提示让用户用管理员模式运行来关联。

另外一个修正就是对UTF-8无BOM的支持。代码基本还是抄小熏的,也稍微看了一下别的网页。

总而言之把参考的网站都贴出来:

另外在笔记本上build遇到了奇怪的sign的问题,索性把sign和security的选项都去掉了(你说这个谁懂啊?)。

AMD可交换显示卡(即笔记本双显)的一些现状和解决方案

11/1更新

我觉得有必要更新一下本文,讲一些新状况。

虽然我已经关闭了Windows 10的自动驱动更新,但是十天前微软还是很脑残地自动把我的AMD和Intel驱动都更新到了最新官方版(当时应该是15.9),开机黑屏N分钟才能进系统的BUG果然又出现了,而且还有另外一个问题:即使进入系统之后,只要一动鼠标就会再假死几分钟才能操作。我通过重新覆盖安装Catalyst UnifL的方法解决了。

后来得知这应该算是AMD的一个BUG,是AMD的一个叫做“Ultra Low Power State (ULPS)”feature导致的。具体解决方法也很简单就是去注册表将“EnableULPS”改成0就行
其实Catalyst UnifL本来之前也已经推出了对应15.9的beta版,但是正是因为这个BUG的原因取消了发布。值得注意的是,据说每次升级驱动之后这个参数又会被重置回enabled,所以用AMD官方驱动升级的同学要留意了。(11/22更新:我前几天试了下官方驱动+修改这个参数为0,依然开机黑屏……看来我唯一的选择就是UnifL的修改驱动了)

这两天,AMD更新了15.10驱动,Catalyst UnifL也再次跟进。从changelog来看,似乎AMD并没有从根本上解决这个问题…但是在该第三方驱动中默认禁用了该特性,也算是一个可以接受的workaround。

其中还提到,本次更新后Win 10的Windows update应该不会再覆盖UnifL的驱动了,看来首段我提到的问题应该不会再发生,我应该也可以放心地再把“自动下载驱动”打开了(毕竟关掉之后,在添加其他即插即用设备的时候不太方便)。

另外我留意到,在changelog中提到某些HP笔记本(虽然没具体包括我的型号,但是都是惠普商用本系列的)会有一些启动/关机的问题,已经被微软自己修复,本次一并包括到此次发布中。虽然我没印象有遇到过这些问题,但是看到和自己有关的bug被修复总是好的。

最后应该注意最后的“Known issues”部分。如果你有遇到其中提到的问题,(例如,某些电脑会出现开启快速启动(fast startup)后关机/开机蓝屏的问题),别忘了看一下solution。

无论如何这次的驱动值得更新一下,明天回学校拿到笔记本就试试。


以后每次电脑上遇到什么问题不管解决了还是没解决都决定写一篇blog把解决的过程和找到的链接记录下来以备以后自己和别人用。记忆这个东西还是太不可靠。

首先说清楚,这里的双显是指笔记本特有的Intel CPU内置显卡+AMD独立显卡这种配置,而不是什么双独显或者APU。当然N家也有类似的配置不过不在这里的讨论范围内。由于笔记本有省电的需求,所以会设置成切换的方式,如果是台式机自然直接用独显就拉倒了。

我的HP笔记本购于2013年(型号:4431s),之前一直使用的是官方提供的OEM驱动。在该驱动中,显卡的切换方式可以在Fixed mode和Dynamic mode中选择——前者是固定只用一个GPU,后者是根据程序的需求自动选择(每个程序对应的GPU可以定制)。由于我的笔记本一直都是插电源使用,故一直是用fixed mode并选成始终使用高性能显卡。

但是这个驱动有几个问题。首先就是这驱动的版本实在是太老了,毕竟是OEM,好像在2012年之后就没有再更新过。虽然平时感觉不到但是优化什么的一定无法和最新的比,而且如果使用AMD的显卡,会出现和声卡驱动冲突(?)导致爆音的问题——如果切换到集显就没此问题(当然,不能排除是硬件缺陷)。而且很显然地,并没有Win 10的版本(最后的版本的link,在8.1的分类里都搜不到更别说Win 10了,连分类都没有……)。

因此,此次升级win10之后,就只能用windows自己安装的AMD和Intel官版驱动。驱动本身工作正常,但是我发现显卡的切换方式中不再有fixed mode,而是只能根据程序的不同动态选择GPU。这也就罢了,最恶心的是某些程序(包括很常用的各种浏览器)居然是锁死使用“省电”GPU不能修改。

在网上搜索一番,发现提第一个问题(没有固定GPU模式)的人意外地少,让我怀疑是不是固定GPU模式本身就是HP自己搞出来的东西?这篇 Win 8 AMD Switchable Graphics FAQ下的某个回复证实了我的想法——至少,Fixed mode vs. Dynamics mode这种说法只有HP才在用(HP官网说明)。不过文中提到了BIOS能改(注:可能需要最新版本的BIOS),值得一试。我进入BIOS中发现只有一个选项叫做“Switchable graphics”,并没有其他的说明了。试着禁用它,结果启动完发现整个AMD显卡消失了,变成只有Intel的(啊喂正常来讲怎么都是禁用Intel的吧!)。我没有细究,就又改回去了。

另外一篇文章,有人明确提出在14.4(CCC版本号)之后Fixed mode已经没有了。也是,如果我没记错HP提供的OEM版驱动似乎是ver. 11……那退而求其次,好歹把浏览器给我解锁了让我用AMD GPU啊,现在的网络视频对显卡的要求可是很高的。

幸好,这个是有解决方案的。一个名叫Catalyst UnifL第三方驱动改版提供了这一功能。这个改版专门做AMD+intel方案的驱动,除了此改动之外还有签名修改之类的东西,具体可参见官网(不过很搞笑的是,我在官方介绍里瞅了半天也没看到解锁部分程序GPU选择权这一卖点……还是搜别的地方搜到的)。驱动很大,下下来安装(其实是解压)之后运行里面的bat会依次安装intel驱动、重启、安装amd驱动、再重启。安装界面倒是都是和原版一样,估计修改的部分在核心文件处吧。

装完之后和说的一样,可以修改任何程序的GPU了。除了Chrome和Firefox之外,我手动添加了Firefox的外挂进程plugin-container.exe,毕竟flash运行在里面。

另外有件事值得一提。安装Win10之后许多人都遇到了开机非常慢,会黑屏好大一阵子才进入登录页面的问题,我也不例外。经过在外国网站一番搜索几乎可以确定这类问题都是由驱动导致的。最常见的原因就是AMD的驱动。所以所有用AMD显卡且遇到这个问题的,先检查一下你的CCC版本是不是最新的15.7,如果不是务必手动更新一下(Windows update有时候并不会一直更新到最新版)。至少对我,这个是有效的。我安装上述的第三方驱动的同时自然升级到了最新版,现在开机启动从按下按钮到进入Splash screen只需要16秒,后来又去Bios里开启了fast boot,只要12秒了。

其他参考文献:

  1. http://h20566.www2.hp.com/hpsc/doc/public/display?docId=emr_na-c02731962&lang=en&cc=us
  2. http://h30434.www3.hp.com/t5/Notebook-Display-and-Video/Official-HP-statement-on-Switchable-Graphics-and-Open-GL/td-p/766285

后人人时代的下载选择?《星际穿越》四版本简单比较

虽然我一直对盗版资源分享的未来的种种危言耸听不以为然,但不可否认地是人人的垮台对获取影视资源的便利程度依然造成了一些影响。不过目前来看,这种影响多半还是局限在老片上——向人人网站那么方便的检索网站确实除了人人的马甲zimuzu.tv之外没有特别好的替代品(而zimuzu.tv要中级会员才能看到链接);但是总体而言,下新的电影或者美剧基本是没太大影响。恰恰相反,由于群龙无首的效应,现在反而回到了当年各种版本纷飞的乱花渐欲迷人眼的情况。这也就是此博文的意义所在了。所以想来看关于压制水平的细致比较的,估计是来错地方了——本文主要是粗略地分析一下现在存在的几个版本的细节处理问题,为了自己以后选下载做个存档罢了。

姑且简单回顾一下人人。其实在大学期间,坐拥教育网的高带宽,外加人略中二,我是对这种内嵌字幕的电影资源不屑一顾的。当时看电影基本都是跑到随便哪个PT直接下1080p来看,再自行寻找合适的字幕。然而随着年纪增大和网络环境的变化,也逐渐厌倦了每次看电影下资源那复杂的步骤。人人影视压制的所谓“HR-HDTV”版本恰好能满足我的需求:适中的文件大小,能在清晰度和体积之间取得一个平衡;自带双语字幕,免去自行调教时间轴和对比翻译的辛苦,同时质量也算说得过去,而且退一万步说有英文字幕对着看即使有错也无伤大雅了;比较保守的压制方式使得放到移动设备观看异常地方便。最重要的一点是,人人的片子都是经过音量均衡的,完美地解决了电影大部分人声音量偏小的问题。固然效果不能和0day带的原始DTS音轨之类的比效果(或者可能破坏了原始的意图),但是对于用20块钱音响甚至平板那破喇叭的我来说,不用来回去调音量才是更重要的。

在人人被查封之后,他们贼心不死的开了N多的MJ站,基本上找新片依然没什么问题。然而从今年年初起,不知道是因为组员流失还是什么其他的原因,人人居然不再做HR-HDTV版本的电影了(美剧依然在做)。虽然现在依然有MP4版的,其他也都没什么区别(一般而言MP4码率要低一些,但是我并不咋关心),但是上文提到的“均衡音量”的设置却很遗憾没有在MP4版本中保留下来——这几乎是我选择人人压制版的最大的原因。

既然已经死了,那感叹也没有用。前一段正好想复习下《星际穿越》(毕竟第一次在电影院看原声版基本剧情大概只懂了一半囧),在各个现存的资源站搜刮一番,居然找到了四个版本。那么接下来就详细比较一下每个版本的不同。

1. 深影论坛版

下载地址:原声版中英双音轨版 (可能需要先注册账号)

深影基本是个和人人差不多的网站,除了没有门户用论坛发布以外。大概也得益于此,没有和人人一起嗝屁。而且有意思的是,它也和人人一样也是同时出MP4版和MKV版。介于人人的前车之鉴,外加深影的MP4版码率实在是低的过分(《星际穿越》长达2小时49分,MP4版居然只有1.37G),我就只下了MKV版的来看。介于我对中文音轨没啥需求,我只下了单音轨版。虽然非本文重点,但是视频的基本情况也贴一下:

文件名:星际穿越.IMAX.巨幕.Interstellar.2014.中英字幕.BDrip.720p.x264.深影论坛影视组.mkv
体积:3.58GB 封装:MKV 视频:H.264 1280×720 2584Kbps 音频:AC-3 448Kbps

字幕情况:有特效。由论坛帖可知,是“老生制作”。中文字幕实际就是国配的字幕,所以质量尚可,偶尔和英文直译差的比较远。这么来看其实就是负责了个压制。字幕的字体是这样的:

星际穿越.IMAX.巨幕.Interstellar.2014.中英字幕.BDrip.720p.x264.深影论坛影视组.mkv_003937.022

虽然和人人的蓝字不太一样,但是也是蛮舒服的。哦,差点忘了最重要的事情——音量。没错,音量是经过调整的,平时看懂的音量也可以听得很清楚,这点很赞。

2. 高清MP4吧版

下载地址:720P版1080P版

这个网站其实我是前一段才听说。看上去弄得还挺像回事的。和人人以及深影一样,制作内嵌字幕的电影、美剧之类的。独特之处在于他还做1080P的版本,至于封装全是MP4。我下的是720P版。如果自行搜索注意下别下成V1版,有个修正版。

文件名:星际穿越.IMAX版.修正特效中英字幕.Interstellar.2014.BD720P.X264.AAC.English&Mandarin.CHS-ENG.Mp4Ba.mp4
体积:3.26GB 封装:MP4 视频:H.264 1280×720 2500Kbps 音频:AAC 128Kbps (x2)

字幕情况:基本上而言,和深影版相同。同样的特效字幕,同样的国配版翻译。但是中文字幕的断句和深影有小区别。字体:

星际穿越.IMAX版.修正特效中英字幕.Interstellar.2014.BD720P.X264.AAC.English&Mandarin.CHS-ENG.Mp4Ba.mp4_003937.116

可以看到字体和深影的不太一样,不过区别很小。音量,也是调整过的,很棒。和深影的比稍微小了那么一点点。

3. 人人(?)版本1

下载地址

前面黑过人人的MP4版,那自然也要来对比下不是。不过奇怪的是人人这片出了两个版本:byhh以及cili003链接(注意两个2.3GB的有一个是V2,故实际上有2.1和2.3GB俩版本)。先说说3月16日发布的、2.1GB的版本。

文件名:Interstellar.2014.星际穿越.720p.Chi_Eng.BD-MP4.mp4 (不同网站下可能会有各种乱七八糟的后缀)
体积:2.11GB 封装:MP4 视频:H.264 1280×720 1599Kbps 音频:AAC 192Kbps

字幕情况:可以看到,这个视频文件名并没有任何标示,所以到底算不算人人的片呢?片头倒是有职员名单就是了。字母的来源依然是国配,但是并没有特效(前面忘了说了,所谓特效…是指片头logo处的各种特效。虽然没什么卵用但是聊胜于无)。字体效果:

Interstellar.2014.星际穿越.720p.Chi_Eng.BD-MP4.mp4_003937.037

字体和上面两个依然很像。音量就像我上面说的,是维持了片源原始状态——很小,真的很小。另外这个的视频的码率确实低了点,但是放平板上是没区别啦。

4. 人人版本2

下载地址

准确地说,这个打有“ZMZ”才是正儿八经的人人版。

文件名:Interstellar.2014.星际穿越.720p.Chi_Eng.ZMZ-BD-MP4-V2.mp4 (不同网站下可能会有各种乱七八糟的后缀)
体积:2.27GB 封装:MP4 视频:H.264 1280×720 1799Kbps 音频:AAC 128Kbps

字幕情况:字幕并不是国配,是人人自行制作的,片头有职员名单。质量嘛自然也是人人往常的质量,稍有错误但是不影响大局,而且比起国配版和英文原文更匹配一些。也很有骨气地没有用人家的特效字幕(咦?),但对于片头一些关键字样如发行商也添加了中文就是(所以说到底谁在乎这个啊…)。字体效果:

Interstellar.2014.星际穿越.720p.Chi_Eng.ZMZ-BD-MP4-V2.mp4_003937.123

安定的蓝边儿字!然并卵,没调整过的音量实在是太小了,我很不开心。

综合而言,我以后可能会选用深影的或者MP4吧的。只是我很怀疑MP4吧有自行翻译的能力,所以具体字幕素质如何得看他从哪来扣来的……深影嘛这次虽然也不是他们自己翻译的,但是根据之前看超能陆战队的表现来看,马马虎虎可以接受了;而且他们的码率真的比较足。

那么,本文到这里也就结束啦。多扯一句,重新看了遍带字幕的我得修正之前的结论,《星际穿越》是好片!虽然确实和诺兰之前的片不是一个味儿。