转载

Jython初始化乱码问题

实际上默认情况下启动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。

原文  http://blog.hellopython.wang/Jython-initizied-UnicodeDecodeError/
正文到此结束
Loading...