实际上默认情况下启动Jython是不会出现UnicodeDecodeError异常的,但是有个同事的电脑上的用户名是中文的,你懂的。然后就一直启动不了,急死人了。
默认情况下,Python启动的时候会加载site模块,在其main函数中会进行如下的操作:
del sys.setdefaultencoding
把对应的设置默认编码的函数删除。
因此,我们有:
>>> import sys >>> sys.getdefaultencoding() 'ascii'
而在其execsitecustomize函数中会导入1个sitecustomize的模块,我们可以在这里进行操作。
我们编写1个该脚本,其内容为:
#coding:utf-8 import sys reload(sys) sys.setdefaultencoding("gbk")
然后进行编译:
λ java -jar jython-standalone-2.7.0.jar -m compileall sitecustomize.py
编译完成后将其class文件丢在jython的lib目录下即可,此时有:
λ java -jar jython-standalone-2.7.0.jar Jython 2.7.0 (default:9987c746f838, Apr 29 2015, 02:25:11) [Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_181 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.getdefaultencoding() 'GBK'
另外需要注意的是,在Jython中默认的平台信息会丢失:
>>> import platform >>> platform.system() 'Java'
可以看到此时就是1个Java的系统,为此我们需要调用Java来获取其详细信息:
>>> from java.lang import System >>> System.getProperty("os.name") u'Windows 10'
这样我们就得到了当前系统为Windows。