Python--Cmd窗口运行Python时提示Fatal Python error: Py_Initialize: can't initialize sys standard streams Loo...

源地址连接:

http://www.tuicool.com/articles/ryuaUze

 

最近,我在把一个 Python 2 的视频下载工具 youku-lixian 改写成 Python 3,并添加了自己需要的 YouTube 支持。

在 Linux 下,事情进行得很顺利:所有的东西都用 UTF-8 进行编码。Python 3 里的 str 类型从 2.x 版本的 ASCII 字符串变成了 Unicode 字符串;我移除了原来代码里关于本地编码类型的判断处理部分。程序从抓取的页面上解析出视频标题部分的 Unicode 字符串,直接 print ()显示到标准输出,一切看起来很和谐。

假定我抓取的这个视频标题是中文,叫做“你好,世界”。众所周知,得益于 Python 良好的 Unicode 支持,输出它只需要简单的一句:

print ('你好,世界')

在 天杀的 Windows 7 下测试这个程序时,麻烦就出现了。如果你想知道我为什么这么说,请继续看下去。

我所不了解的 Windows

去年从学校拿到这台 Dell 笔记本时,Windows 7 自然是预装在上面的。

系统语言已经设置成了英语。很快,我对瑞典语键盘的布局感到极其不适应:它的标点符号位置与英语键盘布局有很大区别,分号、冒号、单引号双引号、斜杠反斜杠这些程序员司空见惯的符号,和美式英语键盘完全不同。于是,我把键盘布局换回了习惯的英语键盘,顺便把控制面板的“区域”选项也一概从瑞典换到了英语/美国。

在很长一段时间里,除了界面是英文以外,它看起来和以往用的中文系统没什么区别:有默认的中文字体,输入法可以添加中文的。我平时用它做的,只有:上网,挂迅雷,拿 IE 登网银,玩 Mirror's Edge,几件事而已。

文件系统是 Unicode 编码的,Web 浏览器是支持 Unicode 的,偶尔用的文本编辑器也是一律设置成 UTF-8 的。而且我们知道,从 Windows 2000 起,Windows 的内码实现是使用 UTF-16LE 的。几乎让人快要忘了还有代码页这么一回事。

可是,如果要在英文 Windows 系统的命令提示符里执行这个简单的输出 Unicode 文本的程序:

#!/usr/bin/env python
# -*- coding: utf-8 -*- if __name__ == '__main__':
    print ('你好,世界')

Python 就会跳出来一段错误:

File "c:\Python32\lib\encodings\cp437.py", line 19, in encode return codecs.charmap_encode (input,self.errors,encoding_map)[0] UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-1: character maps to <undefined>

难道 Python 3 不是支持 Unicode 的吗?难道它不是跨平台的吗?

第一个问题,基本上是对的,Python 3 确实支持 Unicode,这种支持体现在它把所有的 str 字符串都作为 Unicode 处理这件事情上。

第二个问题,不完全,跨平台的可移植性是有条件的。Python 本身是支持 Unicode,但是如果遇上了非 Unicode 的古董环境,那就一点办法也没有。

什么叫“非 Unicode 的古董环境”呢……不,我说的不是 DOS。这个东西,竟然就是 Windows 上的 cmd.exe ,每个人或多或少都用过的命令行环境。

cmd.exe ,从 MinGW 到 Python,基本上每个 Windows 下需要接触命令行的开发人员都躲不过去的东西,微软怎么就不能把它做好些?窗口大小不能随心所欲改也就算了,不能全屏显示也就算了,字体大小屏幕缓冲设置各种限制也就算了,鼠标拖拽不方便也就算了,命令行补全补不全也就算了,你好歹能把默认编码改成用 Unicode 吧?一个破窗口从二十年前的 3.x 时代沿用到今天的 Windows 7,从依赖 DOS 的command.com 到独立的 cmd.exe ,尼玛这么多年了,也没见功能上有什么实质的改进,是不是在微软眼里所有的程序员都在拿个白花花的 IDE“做你的 code”、不需要命令行了?

(在 Windows 已经完全使用 UTF-16 作为内码实现的今天, cmd.exe 仍然在使用系统默认的代码页,我所能想到的唯一理由就是为了保持和以前的 non-Unicode 程序兼容——不过这理由也太弱了吧)

微软有功夫把 Windows 8 的界面做得花里胡哨,不过看样子他们是压根不打算把cmd.ex

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值