我有一个系统,我在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'
>>>
我是否需要在任何机器上更改编码设置才能解决此问题?
答案 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上接收的确切输入进行一些调查,并解释为什么胁迫对你不起作用吗?