1

特殊文字や絵文字を含む可能性のある UITextField のコンテンツを取得して、GET リクエストで PHP サービスに渡すことができるものに変換しようとしています。

文字列をまったくエンコードしない場合、絵文字は問題なく表示されます (DB で見ることができ、適切に返されます) ... しかし、特殊文字 (~!@#$% など) を追加すると.) GET リクエストがチョークします。

したがって、URL エンコーダーを介して文字列を実行します。

[commentText stringByAddingPercentEscapesUsingEncoding:NSNonLossyASCIIStringEncoding];

NSNonLossyASCIIStringEncoding を使用して絵文字を適切に取得していますが、これを使用してエンコードすると nil 文字列が返されます。実際、nil を返さない唯一のエンコーディングは UTF8 ですが、絵文字の Unicode をパーセント エスケープで変更します。

どうすればいいですか?この場合、独自の文字列置換を作成する必要がありますか、または表示されていない iOS の方法がありますか?

乾杯、

クリス

4

3 に答える 3

6

これを使用して絵文字をエスケープします。

NSString *escapedEmoji = [NSString stringWithCString:[emojiString cStringUsingEncoding:NSNonLossyASCIIStringEncoding] encoding:NSUTF8StringEncoding];

そして、これは絵文字のエスケープを解除します:

NSString *unescapedEmoji = [NSString stringWithCString:[escapedString cStringUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding];
于 2015-02-22T21:38:55.493 に答える
5

NSNonLossyASCIIStringEncoding渡す文字列が ASCII ではないため、stringByAddingPercentEscapesUsingEncoding:返されます。nilパーセントを使用NSUTF8StringEncodingすると絵文字文字がエスケープされ、それが私が期待する結果です。サーバー側のミドルウェアがクエリ文字列から絵文字を自動的にエスケープ解除していない場合、アップストリームで問題が発生している場合は、サーバー側のコードでそれを行う必要があります。

于 2013-10-10T22:20:34.733 に答える
2

以下のコードを使用して絵文字文字列をエンコードできます

NSString *uniText = [NSString stringWithUTF8String:[youremojistring UTF8String]];
NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding];
于 2013-11-11T11:23:02.410 に答える