UnicodeDecodeError将值从JSON写入文件

时间:2014-01-22 20:53:50

标签: python json unicode cgi telnetlib

我在python中有一个CGI脚本,它使用Telnetlib发送telnet命令。我得到了适当的信息(在这种情况下,javascript形式的javascript中的'nameID',然后发送关于该JSON信息的相应命令。当我尝试编写并发送命令到telnet时, ,我收到UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)消息。

我的代码如下:

import cgi,sys,json,multiprocessing,telnetlib

def updateParam(subjson):
    tn=telnetlib.Telnet()
    tn.open(subjson["netAddress"],24,1)

    logFile=open("log.txt","a")

    tn.write("saveparam nameID "+subjson["nameID"]+"\n")
    logFile.write(tn.read_until("#"))

    tn.close()
    logfile.close()



if __name__=="__main__":
    data=json.load(sys.stdin)

    numProc=4
    pool=multiprocessing.Pool(processes=numProc)

    for dev in data:
        result=pool.apply_async(updateParam,args=(data[dev],))
        result.get()
    pool.close()
    pool.join()

在上面的例子中,我将传递给脚本的JSON(它本身包含JSON作为其元素)加载到data变量中。然后,我创建了一个工作池,以便在updateParam内的每个JSON上执行data函数,因为每个JSON对应于需要发送命令的单个telnet地址。在updateParam内,我打开与设备IP地址的telnet连接,并打开.txt文件以记录发送和接收的内容。我将命令写入telnet连接,这就是我遇到错误的地方。

我能够发送不需要json值的命令,但是当我尝试使用json值时,我得到了UnicodeDecodeError。我也可以毫无问题地将值写入我的.txt文件。

当我尝试将这些值写入telnet连接时,为什么我会特意收到此错误?

编辑: 我进入了通过cgi发送JSON的javascript,并尝试在发送cgi请求之前从json中删除所有非ascii字符。这没用。当我在发送请求之前让javascript警告字符串化的json时,我无法找到任何非ascii字符(尤其是似乎导致问题的ÿ)。然后我实现了this question中找到的解决方案,它似乎工作正常。

0 个答案:

没有答案