web2py windows-linux互操作性

时间:2014-02-26 08:18:13

标签: python web2py

我有一个系统,我在Windows机器上的Web2py框架中开发,现在它部署在Linux机器上。在此系统中,我检查 Unicode 的输入数据类型,如果不是,则返回错误消息,因为 Unicode 是必需的。我将参数作为u'HI'unicode('HELLO')发送给它。这适用于我的Windows机器,但现在我已经在Linux上部署了系统,因为需要Unicode,我会收到错误。如果我遗漏了任何东西,请告诉我。

我在两台机器上都有相同的Python(2.7.2)版本。

这就是我检查输入变量类型的方法:

if isinstance(value,getattr(__builtin__,'unicode')) or isinstance(value,unicode)):                    
    pass
else:
    return "error message"

我在我的机器和linux服务器上尝试了以下命令来检查python编码设置。其结果如下:

我的机器 -

>>> import sys
>>> print sys.stdout.encoding
cp1252
>>> print sys.stdin.encoding
cp1252
>>> sys.getdefaultencoding()
'ascii'
>>> 

在Linux机器上

>>> import sys
>>> print sys.stdout.encoding
UTF-8
>>> print sys.stdin.encoding
UTF-8
>>> sys.getdefaultencoding()
'ascii'
>>>

我是否需要在任何机器上更改编码设置才能解决此问题?

1 个答案:

答案 0 :(得分:1)

如果可能,通常avoid directly type-checking个变量 - 只需使用它们。这是an example that does it with try-except

在完全丢弃输入之前尝试强制输入是否无效?例如,如果您的Linux系统传入ascii字符串,为什么不将它们转换为utf-8?

try:
    value = value.decode('utf-8')
except (SyntaxError, AttributeError):  # I would probably just do Exception to catch all
    return "error message"

如果这不能解决问题,那么你可以对你在Windows和Linux上接收的确切输入进行一些调查,并解释为什么胁迫对你不起作用吗?