2013-10-10 138 views
1

我想採取可能包含特殊字符和emojis的UITextField的內容,並將其轉換爲我可以傳遞給PHP服務的GET請求。NSString與表情符號/表情符號網址編碼

如果我根本不編碼字符串,emojis顯示得很好(我可以在數據庫中看到它們,它們會正確回到我身邊)......但是如果我添加特殊字符(〜!@ $%等)GET請求扼流器。

於是我運行通過URL編碼字符串:

[commentText stringByAddingPercentEscapesUsingEncoding:NSNonLossyASCIIStringEncoding]; 

我使用NSNonLossyASCIIStringEncoding拿到表情符號,方法正確,它的工作原理,但以此來編碼返回一個字符串爲零。實際上,唯一不會返回零的編碼是UTF8,但是這會使用百分比轉義率覆蓋表情符號unicode。

我該怎麼做?我是否必須爲這種情況編寫自己的字符串替換項,或者是否有iOS方式來執行此操作,而我沒有看到?

乾杯,

克里斯

+0

'NSNonLossyASCIIStringEncoding'明確_如果返回零,則不工作。至於'NSUTF8StringEncoding',「_...用百分比escapes_來表達emoji unicode_」。這正是轉義百分比所做的。你期望發生什麼? – neilco

+0

我需要一些能夠保持完整的unicode位完好無損,同時逃避將阻止GET請求通過的事物。 UTF8接受和逃避表情符號unicode中的字符,導致其無法使用。對於這三個emojis()UTF8編碼將它們轉換爲(%F0%9F%98%84%F0%9F%98%98%F0%9F%98%B3)。 – Raconteur

+0

使用NonLossyASCII進行編碼可使它們保持不變。 – Raconteur

回答

5

NSNonLossyASCIIStringEncodingstringByAddingPercentEscapesUsingEncoding:回報nil,因爲你正在傳遞的字符串不是ASCII。使用NSUTF8StringEncoding%可以逸出表情符號,這就是我期望的結果。如果你的服務器端中間件沒有自動從查詢字符串中去掉表情符號,那麼你應該在你的服務器端代碼中這樣做,如果它導致上游問題的話。

+0

這是門票。通過UTF8在出口工作的編碼,提供中間件unescapes之前填入數據庫。然而,好奇的是,除非我解碼生成的JSON使用NSNonLossyASCIIStringEncoding,我得到了垃圾NonLossy給了我實際的表情符號不知道爲什麼,但是這對我有用 – Raconteur

2

您可以使用下面的代碼編碼的表情符號串

NSString *uniText = [NSString stringWithUTF8String:[youremojistring UTF8String]]; 
NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding]; 
NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding]; 
6

使用此逃脫的表情符號:

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

而且這UNESCAPE的表情符號:

NSString *unescapedEmoji = [NSString stringWithCString:[escapedString cStringUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding]; 
+0

你的示例代碼工作完美我不得不編碼聊天消息發送爲ASCII字符串 – AndaluZ

+0

我'在我的情況下,這工作正常(iOS到iOS的消息),但它添加了一些額外的Unicode字符從(iOS到Android)。我該怎麼做我這種情況。 –