这个问题其实根本就不是个问题 ,想得多了就反而成为问题了。 本座今天就想多了点,造成 了一段时间的困扰, 于是 写下来记录一下。
qjson支持Unicode,JSONObject也支持Unicode。因此,它们之间直接传递 Unicode字符串即可,无需费心 再做其它的转换。
举个例子。使用 qjson 对 这样一个对象进行序列 化 :
属性 |
值 |
isvalid |
true |
provinceandcarrier |
内蒙古移动 |
provinceandcarrier这个属性的值是一个字符串。这里假设 妳在Qt代码里已经正确地构造出了这个Unicode字符串 (无论妳是通过tr()包装再用语言家翻译,还是 从其它字符编码正确转换而来 )。检验 是否正确构造出了Unicode编码字符串的一个简单方法 就是 qDebug()输出这个字符串,如果肉眼看着不是乱码,那么这个字符串就确实是已经正确构造为Unicode编码的字符串了。例如, qDebug()输出的内容是这样的:
../ChargeResultReceiver/CheckPhoneNumberService.cpp 61 ParseCheckPhoneResult " 整个回复内容: " "1474747| 内蒙古乌兰察布 | 移动 "
肉眼 能看出这是 有意义 的 中文 (内蒙古乌兰 察布|移动 ) ,那么显然这个字符串的编码是正确处理 了 的。
接下来就简单了。按照教科书 中的方法,使用qjson将这个对象直接序列化 ,这一步中根本就不要再想什么字符编码的问题。序列 化之后,得到的JSON,使用浏览器来看是这样的 (这里需要说明一下,本座在服务器 端 程序中 对字符串还作了内容方面 的 处理,对于“内蒙古乌兰察布|移动”会处理成“内蒙古移动” ) :
{ "isvalid" : true, "provinceandcarrier" : "\u5185\u8499\u53e4\u79fb\u52a8" }
可以看到,输出的字符 串已经经过转义了 。浏览器 没有自动反转义,所以看起来字符串是“裸”的。
然后 ,Android的JSONObject这边如何处理呢? 同样,无需特别处理什么字符编码问题,因为它会自动反转义的。
按照教科书 式的方法使用一个JSONObject对象来解析这整个JSON字符串。然后使用 JSONObject的getString方法取出provinceandcarrier这个属性的值。这个时候Log.v输出一下试试,妳会发现输出 的内容已经自动变成 “内蒙古移动”了。
总之 ,使用 QJSON与JSONObject 来进行服务器-客户端通信的过程中 ,“QJSON进行转义/JSONObject进行反转义”这个过程对于这两个工具的用户程序员来说是透明的,无需过分操心。只需要注意 , 让妳的QString对象在被输出到JSON中去之前就已经 是正确的Unicode字符串了 ,而不是一庹乱码。
肉来了
超杀女
只是 腿
HxLauncher: Launch Android applications by voice commands