StupidBeauty
Read times:1158Posted at:Thu Feb 21 01:57:45 2013
- no title specified

c++的qjson与Android的JSONObject之间传递中文字符串

这个问题其实根本就不是个问题 ,想得多了就反而成为问题了。 本座今天就想多了点,造成 了一段时间的困扰, 于是 写下来记录一下。

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字符串了 ,而不是一庹乱码。

肉来了

超杀女

只是

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4