2012-03-01 15 views
0

私は以下のjson文字列のエンコードを1日から見つけることを試みています。 jSonのような文字列が表示されますNSData(iPhone SDK)で複数の言語のエンコーディングが見つかりませんか?

[ 
    { 
    "ParentId": "154", 
    "TopMenuId": "159", 
    "MainMenuText": "开放时间", 
    "Language": "6", 
    "MenuImage": "" 
    }, 
    { 
    "ParentId": "154", 
    "TopMenuId": "166", 
    "MainMenuText": "СЕРТИФИКАЦИЯ ISO", 
    "Language": "8", 
    "MenuImage": "" 
    } 
] 

ブラウザでOKです。私はそれが表示さのNSLogでNSDataの文字エンコーディングを取得するときには、

[ 
    { 
    "ParentId": "154", 
    "TopMenuId": "159", 
    "MainMenuText": "开放时间", 
    "Language": "6", 
    "MenuImage": "" 
    }, 
    { 
    "ParentId": "154", 
    "TopMenuId": "166", 
    "MainMenuText": "СЕРТИФИКАЦИЯ ISO", 
    "Language": "8", 
    "MenuImage": "" 
    } 
] 

は、私はほとんどすべてのCFStringエンコーディングを使用しますが、まだ成功を得ることはありません。

注:私はNSLogをブラウザに入れてもOKです。 xcdatamodeldに文字列で格納すると&#1057という形式で格納されます。

助けてください。 ありがとうございます。

+0

これらはHTMLエンティティです。ブラウザはレンダリングしますが、NSLogはレンダリングしません。彼らはどこから来ていますか、なぜHTMLエンティティがエンコードされていますか? – deceze

+0

ありがとうございます、ごめんなさい..私は何を意味するのか分かりません?含まれているのはURLから来て、JSON文字列で返します。私もエンコードせずに試しましたが、NSLog&Databaseに&#1040形式で表示しています。 – Ruchi

+0

*このデータの* encoding *は誰ですか? – deceze

答えて

1

OK、ここでは2種類のエンコーディングについて説明します。どんな文字列でも最初にバイトシーケンスとしてエンコードされます。私。文字列「ビットが」ASCIIエンコーディングでこれらのビットとしてエンコードされます。

[[NSString alloc] initWithData:... encoding:NSUTF8StringEncoding] 

しかし、それはあなたが持っている問題ではない:私たちは次のようなコードに話をしているエンコーディングの種類があります

01100010 01101001 01110100 01110011 

。文字列はASCIIでエンコードされますが、その文字は実際の文字ではなくXML/HTMLエンティティとして表されます。私。 UTF-8で符号化されたСという文字の代わりに、HTMLエンティティСがあります。バイトエンコーディングはかなり無関係です。

これらの文字をHTMLエンティティデコードするか、HTMLエンコードしてから送信する必要があります。 JSON文字列内の文字のHTMLエンティティ表現を持つことは、非常に珍しく余分です。

+0

残念ながら、私はCocoaメソッドをHTMLエンティティにデコードすることはできませんが、ドキュメンテーションによる検索ではかなり簡単に結果が得られるはずです。私はHTMLエンティティを送信しないことで、ソースで問題を解決することを提案します。 – deceze

+0

HTMLエンティティは1990年代です。今日、地球上のすべてのコンピュータはUTF-8を正しく理解しているので、それらはもう必要ありません(HTMLページの</>は例外です)。 – Cyrille

0

最後に、私はこの問題を解決しました。 HTMLエンティティを元の文字列に変換するには、次のようにします。

1)downloadコンテンツ。
2)GTMNSString + HTML.h .mとNSString + html.h .mファイルをプロジェクトに追加します。
3)戻り文字列が 'allData'であると仮定し、次に
[allData stringByDecodingHTMLEntities]関数を使用して元の文字列に変換します。

これだけです。元の文字列を手に入れました!

関連する問題