在序列化Swift之前对JSon进行编码

3

我有一个JSON方法,并且在UTF8的Web服务上表现良好,但现在有一个使用另一种编码的JSON,例如ú = \u00da。我知道我必须将其编码为UTF8才能在Swift上使用我的JSON。但我不知道怎么做。在request.HTTPBody上有一个.dataUsingEncoding,这不足够吗?

request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
            data, response, error in
            if error != nil
            {
                print("error=\(error)")
                return
            }

            do{
                let myJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)

                let jsonEmpresas = myJSON["TablaEmp"]!!["item"]
                let empresas: [[String: AnyObject]]

                if let multipleEmpresas = jsonEmpresas as? [[String: AnyObject]] {
                    empresas = multipleEmpresas
                } else if let singleEmpresa = jsonEmpresas as? [String: AnyObject] {
                    empresas = [singleEmpresa]
                } else {
                    empresas = []
                }

                for empresa in empresas{
                    let zcif = empresa["Zcif"] as? String

在Do之前,我曾经使用过let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding),但没有被使用。

错误: "Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=字符0附近的值无效。}"


在 postString 中,有任何参数吗? - Chathuranga Silva
我有一些连接参数(用户名和密码),让postString =“username = \(userWS)&password = \(passWS)”。 - Aris Guimerá
所以返回值是否以UTF-8编码?或者你想用UTF8编码发送参数吗? - Chathuranga Silva
我想要返回编码值,以UTF-8接收我的JSON。 - Aris Guimerá
你的服务器数据库是否编码为UTF-8? - Chathuranga Silva
我原本以为这个 PHP 会返回拉丁编码,这就是我想要接收我的 JSON 的原因。需要将编码转换为 UTF-8,然后进行序列化。 - Aris Guimerá
1个回答

1
如果您想将表情符号或其他Unicode字符作为参数发送,则需要像postString.dataUsingEncoding(NSUTF8StringEncoding)!一样对HTTP请求进行编码。但是,正如您在评论中所说,此Web服务仅发送字符串或整数,因此可以使用postString.dataUsingEncoding(NSASCIIStringEncoding)!。因为这行代码只影响发送参数,它只对发送参数进行编码,而不解码接收到的JSON值。所以基本上只需获取JSON值即可。
因此,当您返回编码值时,苹果支持这些编码文本。

数据必须采用JSON规范中列出的5种受支持编码之一:UTF-8、UTF-16LE、UTF-16BE、UTF-32LE、UTF-32BE。数据可能具有BOM,也可能没有。最有效的编码方式是UTF-8,因此如果您有选择将数据编码传递给此方法,请使用UTF-8。

https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSJSONSerialization_Class/#//apple_ref/occ/clm/NSJSONSerialization/JSONObjectWithData:options:error:

根据苹果和我的经验,我认为您的服务器数据库使用了苹果不支持的编码选项来发送数据。正如我之前所说,您的服务器数据库应该使用UTF-8编码。您的数据库表使用了其他编码选项。

仍然是同样的错误“Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}" 我不知道你是否理解我的意思,我需要对我的JSON进行编码以便能够顺利序列化。 - Aris Guimerá
它在控制台上,但我知道错误在哪里,我必须将接收到的JSON编码为UTF8。 - Aris Guimerá
你能提供一个JSON URL用于测试吗? - Chathuranga Silva
不能在内网上,但我的问题是,当我收到我的 JSON (让 myJSON = try NSJSONSerialization.JSONObjectWithData(data!,options: .AllowFragments))时,如何进行编码为 UTF-8。 - Aris Guimerá

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接