1

作業中の iPhone アプリに絵文字アイコンを表示する方法がわかりません。問題は、誰かがアプリからデータベースに何かを投稿すると、アプリに正方形として表示されることです。絵文字アイコンがあるべきサーバーからアプリが取得しているものは、次のようなものです \uf604

誰かが私が間違っていることを知っていますか? 私は良い答えを探してきましたが、これまでのところ、正確に関連するものは見つかりませんでした。

//more info
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];

returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
        self.memoArray = [returnString JSONValue]; 

//when adding it to the label
cell.memoLabel.text = [itemData objectForKey: @"memo"];

私が理解したことは、たとえば「\Uf604」は「\U0001F604」である必要があるということです。

4

3 に答える 3

4

これは、Json パーサー SBJSON のバグです。私は、いくつかのプロジェクトで、いくつかのバージョンを使用して、SBJson クラスを使用してきましたが、一部の絵文字で使用される複雑な Unicode に問題があることを発見しました。アイコンは非常に長い Unicode で表されます。正確な形式は覚えていませんが、二重の Unicode のようなものです。SBJson の内部で、大きな Unicode を解析するバグをいくつか見つけました。

メソッドを変更して動作するようになりましたが、Stig の SBJson リポジトリに行ってそのことを報告したところ、ユニコードに関する未解決の問題が見つかりました: https://github.com/stig/json-framework/issues/115

それにもかかわらず、私の解決策は非常に異なっていました。私が使用していたバージョンでは、メソッド scanUnicodeChar: でコメントするだけで済みました。

/*
if (hi >= 0xd800) {     // high surrogate char?
    ... if-body ... ... 
}
*/

バージョンにそのメソッドとその「if」が含まれている場合は、削除してみてください。

他のバージョンの場合、おそらく解決策は簡単です。getStringToken: という名前のメソッドを見つけ、その中で、switch-case '\' ステートメント内で、次のようにコメントしてみてください。

/*
if (SBStringIsSurrogateHighCharacter(hi)) {
  ..... body ....
} else if ....... {
    .... ....
} else {
*/

CFStringAppendCharacters((CFMutableStringRef)acc, &hi, 1);

/*
}
*/

私はこの最後のものをテストしていません。すべてをうまく機能させるには、さらに何かを行う必要があります。

于 2012-07-06T06:43:58.837 に答える
0

最新の SBJson に更新すると、この問題は修正されました。

https://github.com/stig/json-framework/tags

于 2013-12-04T19:22:55.103 に答える
0

次の手順に従ってください。

  • 絵文字を base64 に変換してサーバーに送信します。
  • サーバー側では、base64 をデコードせずにデータベースに保存します。
  • アプリケーションに絵文字を表示する場合は、サーバーから同じ base64 データを取得します。
  • 取得文字列をデコードしてアプリに表示します。
  • 絵文字が正しく表示されます。

注: WebPage に表示する場合は、WebPage にデータを表示するときにデータをデコードします。

于 2013-05-14T12:47:31.810 に答える