【问题标题】:IOS JSON escaping special charactersIOS JSON转义特殊字符
【发布时间】:2012-04-02 04:28:34
【问题描述】:

我在 IOS 中工作并尝试通过 NSURLRequest 将一些内容传递到 Web 服务器。在服务器上,我有一个 PHP 脚本设置来接受请求字符串并使用 Zend_JSON 框架将其转换为 JSON 对象。我遇到的问题是,只要字符“ø”出现在请求参数的任何部分,请求字符串就会被缩短一个字符。

在去服务器之前请求字符串。

[{"description":"Blah blah","type":"Russebuss","name":"Roscoe Simulator","appVersion":"1.0.20","osVersion":"IOS 5.1","phone":"5555555","country":"Østfold","udid":"bed164974ea0d436a43f3cdee0e005a1"}]

在任何解析之前服务器上的请求字符串

[{"description":"Blah blah","type":"Russebuss","name":"Roscoe Simulator","appVersion":"1.0.20","osVersion":"IOS 5.1","phone":"5555555","country":"Nord-Trøndelag","udid":"bed164974ea0d436a43f3cdee0e005a1"}

除了最后的结束 ] 丢失之外,一切看起来都完全相同。我认为将字符串转换为 UTF-8 时出现问题,但不确定解决此问题的正确方法。

有人知道为什么会这样吗?

【问题讨论】:

  • 你能复制/粘贴一些代码吗(当你发送数据并在服务器端接收它们时)。 Zend_Json 也不是一个框架,而只是 Zend 框架本身的一个组成部分。
  • 另外,“将其(json 字符串)转换为 Json 对象是什么意思?您是否尝试使用 Zend_Json::decode() 将其转换为 php 数组?
  • 代码会很有帮助。我的假设是您将请求的内容长度设置为 NSString 的长度,而不是您从字符串中获得的 NSData 的长度。

标签: objective-c ios json zend-framework nsurlrequest


【解决方案1】:

在这种情况下,首先不要相信 xcode 控制台。你永远不知道控制台实际使用的是哪种编码。

其次,在构建 json 字符串之前转义无效字符。最简单的方法可能是确保您始终使用相同的 unicode 表示形式,例如 utf-8。

第三,如果仍然存在无效字符,请使用带有解析器的 json 库(进行编码)。通过解析回例如验证输出NSString。或使用http://jsonformatter.curiousconcept.com/之类的网络表单手动验证输出

最糟糕的方法是替换字符串中的单个字符,构建您的 json 并转换回来。一种方法是用它的 unicode 表示 U+00E4 (http://www.utf8-chartable.de/) 替换例如德语 ä。

我就是这样做的。我很高兴我需要比第三步更进一步,这是您无论如何都应该执行的步骤,以保持您的代码简单。

【讨论】:

    【解决方案2】:

    请尝试使用 Zends 内部的 json 编码:

    Zend_Json::$useBuiltinEncoderDecoder = true;
    

    应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 2014-11-13
      • 1970-01-01
      • 2016-02-27
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 2015-01-02
      • 1970-01-01
      相关资源
      最近更新 更多