5

私は、人々が絵文字アイコンでメッセージを送信できるようにする iPhone アプリに取り組んでいます。charset utf8mb4 と照合順序 utf8mb4_unicode_ci を使用してアイコンを Mysql に保存したところ、すべての絵文字アイコンがデータベースに正しく保存されました。ただし、json をクライアント (php json_encode) に返すと、絵文字は「\ud83d\ude04」のようにエンコードされ、iPhone では正方形として表示されます。ただし、XML として返すと、絵文字アイコンは '\ud83d\ude04' のように Unicode にならず、単なるアイコンになります。

これが私のサーバーの問題なのか、クライアントの問題なのか疑問に思っています。それが私のクライアントである場合、オブジェクト c はどのようにそれを正しくデコードできますか。

誰か助けてくれませんか?

ありがとう

4

3 に答える 3

11

"\ud83d\ude04"U+D83D U+DE04は、Unicode U+1F604 (SMILING FACE WITH OPEN MOUTH AND SMILING EYES) の「サロゲート ペア」であるの JSON Unicode エスケープ シーケンスです。

しかしNSJSONSerialization、次の例に見られるように、これを正しくデコードします。

const char *jsonString = "{ \"emoji\": \"\\ud83d\\ude04\" }";
NSLog(@"JSON: %s", jsonString);
NSData *jsonData = [NSData dataWithBytes:jsonString length:strlen(jsonString)];
NSError *error;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
self.myLabel.text = [jsonDict objectForKey:@"emoji"];
NSLog(@"Emoji: %@", self.myLabel.text);

出力:

JSON: { "emoji": "\ud83d\ude04" }
Emoji: 

絵文字記号も正しく表示されます (iPhone デバイスとシミュレーターでテスト済み)。

于 2013-01-23T21:17:00.203 に答える
8

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

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

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

于 2013-05-14T12:52:42.673 に答える