2014-02-26 149 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上收到的確切的投入,也解釋了爲什麼脅迫不會爲你工作?