2016-05-20 8 views
3

私はJSONメソッドを持っていて、UTF8 Webサービスでうまく動作しますが、今は別のエンコーディング、たとえばú= \ u00daを持つJSONを持っています。私はすぐに私のJSONを動作させるためにUTF8にエンコードする必要があることを知っています。しかし、私はどのように知りません。 request.HTTPBodyに.dataUsingEncodingがありますが、それでは十分ではありませんか?シリアル化の前にJSonをエンコーディングする

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 

私は前にlet responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)を持っていたが、

ERROR使用されませんでした:「エラードメイン= NSCocoaErrorDomainコード= 3840 "の文字は0の周りの値が無効です" の文字の周りのUserInfo = {NSDebugDescriptionは=無効な値を0} 「

+0

postStringでは、パラメータはありますか? –

+0

postString = "username = \(userWS)&password = \(passWS)に接続するパラメータがありますか? –

+0

戻り値はUTF8でエンコードされていますか?UTF8エンコーディングでパラメータを送信しますか? –

答えて

1

をあなたはあなたがpostString.dataUsingEncoding(NSUTF8StringEncoding)のようなHTTPリクエストをエンコードする必要があるパラメータとして、絵文字やその他のUnicode文字を送信する場合は!。しかし、あなたがコメントについて語ったように、このWebサービスは文字列またはIntを送信するだけです。 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使用:

ので応じてリンゴと私の経験で私はあなたのサーバーのDBがリンゴサポートされていないエンコードオプションを使用してデータを送信すると思います。以前にお伝えしたように、Server DBはUTF-8を使用する必要があります。別のエンコードオプションを使用してDBテーブルを使用してください。

+0

同じエラー "エラードメイン= NSCocoaErrorDomainコード= 3840"文字0の前後に値が無効です " UserInfo = {NSDebugDescription =文字0の値が無効です。} "わかりましたかわかりません。問題なくシリアル化するにはmyJSONをエンコードする必要があります –

+0

このエラーはどのラインでしたか? –

+0

コンソールにありますが、エラーが何であるか知っていますが、私はUTF8に受け取ったJSONをエンコードする必要があります –

関連する問題