2014-02-26 131 views
0

我有一个系统,我在Windows机器上的Web2py框架中开发出来,现在它被部署在Linux机器上。在这个系统中,我检查输入数据的类型为Unicode,如果不是,则返回错误信息为Unicode是必需的。我发送参数为u'HI'unicode('HELLO')。这在我的Windows机器上工作,但现在,因为我已经在Linux上部署了系统,所以我得到错误,因为Unicode是必需的。请让我知道我是否缺少任何东西。web2py windows-linux的互操作性

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

这是怎么了检查输入变量的类型:

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

我曾尝试以下我的机器和Linux服务器上的命令检查蟒蛇编码设置。其结果分别如下:

我机 -

>>> 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' 
>>> 

我需要在任何一台机器,以解决这个改变编码设置?

+2

你能展示一些相关的代码,输入和输出吗?你是否在两个操作系统中使用相同的Python版本? –

+0

@PauloBu刚才编辑的问题。 – gliese581g

+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上收到的确切的投入,也解释了为什么胁迫不会为你工作?