【问题标题】:web2py windows-linux interoperabilityweb2py windows-linux 互操作性
【发布时间】:2014-02-26 08:18:12
【问题描述】:

我有一个我在 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'
>>>

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

【问题讨论】:

  • 你能展示一些相关的代码,输入和输出吗?您是否在两个操作系统中使用相同的 Python 版本?
  • @PauloBu 刚刚编辑了问题。
  • 我认为您在问题中没有提供足够的信息让我们回答。例如,尚不清楚您是如何通过输入的。
  • @PauloBu 这是一个使用 web2py 服务器开发的 JSON 网络服务。我正在尝试使用我的 Windows 机器上的 jsonrpclib 访问该服务。我以 Unicode 格式传递数据(例如:user_ip_address=unicode('10.253.152.71'))。如果您需要更多详细信息,请告诉我。
  • 这听起来不像是互操作性问题,而更像是服务和/或 web2py 本身的问题。

标签: python web2py


【解决方案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 上收到的确切输入进行一些调查,并解释为什么强制对您不起作用?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2013-01-26
    • 2021-07-31
    • 2010-12-27
    相关资源
    最近更新 更多