包含非标准字符的python中的json.loads

时间:2014-10-13 20:54:59

标签: javascript python json unicode

我要做的是使用Javascript在我的Web应用程序中获取一些文本(包含非英文字符的字符串文字,如ă)。将它传递给一个对象,然后在对象上使用JSON.Stringify(),然后将其传递给python脚本。

Python脚本用于加载json数据并最终在POS打印机上打印文本,因此最终数据必须采用特定代码页的ascii十六进制格式,这意味着不得不在之前或之前执行某些字符转换。在python脚本获取数据之后。

基本上是这样的:

someObject.arrayOfTextInputs.push("how can I handle the ă character");
--run a python script and pass to it: JSON.Stringify(someObject) --

在Python中:

jsonStuff = sys.argv[1]
myObject= json.loads(jsonStuff)

现在,如果我只是按原样传递字符串,python脚本会因为ă字符而挂在json.loads上。如果我在Stringify之前替换字符,并且'\ xNN'表示与我需要的代码页中的值匹配,则json.loads仍会挂起。 使用'\ uNNNN'也是一样。

在将json交给json.loads()之前,我还打印出了json,通常只打印出​​一些奇怪的十六进制?字符/图像而不是ă。 但是,将其替换为utf-8重复(在javascript中)\ xc4 \ x83,会使python中的print显示正确的字符(在下一步中它会产生问题)。 将ă替换为代码页852(latin-2)中匹配的字符\ xC7,然后jsonStuff.decode('cp852')

我有什么选择?

编辑:感谢您的欢迎!
我使用的是Python 2.7,我收集的是使用标准的ascii编码。

  • 如果我跳过任何转换,我会得到异常:ValueError:某个字符/字节的控制字符无效..

  • 如果我转换Javascript中的字符(在对象上执行Stringify()之前),使用与utf-8表中的相同字符匹配的转义符:“\ u0103”我得到相同的异常。

  • 如果我将字符转换为符合标准ascii字符集(“\ u0045”)的某个utf-8字符,则加载正常。我猜解码器可以自动将unicode“常规”字符映射到他们的ascii代表中。 转换为“\ x45”也是一样。

  • 如果我在loads()函数中添加了strict = False参数,我可以加载任何转义字符但是我不知道如何在我的python脚本中处理它。

我必须承认,stringify和loads()部分确实让我失去了轨道,因为我在IDE中使用utf8开始,使用来自不同编码的转义字符,然后调用stringify(只有utf8编码的东西是有效的json?)并将其传递给python,它不能处理超过标准字符集的utf8。而且我必须在打印之前最后得到特定代码页(比如Latin-2)的'\ xNN'。

我应该尝试使用strict = False传递任何内容并在python中从那里处理它,或者是否可以使用某些代码页发送所有编码的内容? 我稍后会添加一些代码。

0 个答案:

没有答案