IOS 5で絵文字をUnicode文字に変換したい。
たとえば、変換 \ue415
。
NSString Class Reference のNSStringEncodingに行きました。
IOS 4では、NSUTF16BigEndianStringEncoding
およびNSUTF32BigEndianStringEncoding
私にくれた <e415>
および<0000e415>
、それぞれ、私が望むものに非常に近いです。
IOS 5では、結果は異なります。 <d83dde04>
および<0001f604>
。
どうすれば入手することができますか \ue415
にとって iOS 5で?ありがとうございました。
\ue415
は絵文字のレガシーエンコーディングの一部であり、特定の日本の通信事業者に固有です。ソフトバンク、NTT、およびドコモには、すべて独自のプライベート絵文字セットがありました。
iOS 5は、絵文字文字プレーンと<0001f604>
isはその文字のUnicodeコードポイントです。これに関するウィキペディアのエントリは、EmojiSources.txtマッピングファイルを参照します。これは、古い私用文字コードを本当に取得する必要がある場合に自分でマッピングを行うために使用する必要があります。
これを試してください:
絵文字をUnicodeに変換する
NSData *data = [strEmo dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
Unicodeを絵文字に変換するのは非常に簡単
NSData *data = [strEmo dataUsingEncoding:NSUTF8StringEncoding];
NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
uILabelで絵文字を表示する:
NSString *bellEmojiString = @"U+1F514";
label.text = [NSSting stringWithFormat:@"Table: %@", @"\U0001F514"];
+
を3 zero
桁に慎重に置き換える必要があります
変換して戻す:-
NSData *newdata=[recievedstring dataUsingEncoding:NSUTF8StringEncoding
allowLossyConversion:YES];
NSString *mystring=[[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding];
これを試してください: http://opensource.Apple.com/source/ICU/ICU-461.13/icuSources/data/translit/Any_SoftbankSMS.txt
iOS5では左のコードを使用し、iOS 4以下では右のコードを使用します。
絵文字が(iosからバックエンドサーバーに、そしてiosに)往復しない場合、ios(少なくとも4.2+)がエンコーディングを正しく処理するため、問題はないはずです。何でも。しかし、アプリがサーバーと対話する場合、サーバーの戻り値が間違っていると思われますか?つまり、jsonが間違ってエンコードされました。
何時間も掘り下げた後、私は同じ問題を抱えていて、最終的に私のために働くこの答えを見つけました: https://stackoverflow.com/a/8339255/1090945
サーバーとしてRailsを使用している場合、これで十分です。ios/ xcodeで何もする必要はありません。UTF8/ 16エンコード処理を行わずにNSStringを渡すだけですサーバ。
Postegreはコードを正しく保存します。json:@messageをレンダリングする場合、jsonエンコードに問題があると仮定すると、iosクライアントにjson応答を送り返すだけです。
コンソールで簡単なテストを行うことで、Railsコンソールでjsonエンコーディングの問題があるかどうかをテストできます
test = {"smiley"=>"u{1f604}"}
test.to_json
"{\" smiley\":\"\uf604\"}"(1が失われていることに注意してください)が出力される場合、この問題が発生しています。リンクのパッチにより修正されます。