2017-07-02 14 views
-1

我正在尋找解決方案,我想要存儲英語+阿拉伯語+表情符號字符以存儲到數據庫並在顯示時將其恢復。想要將此字符串「مرحباHello」保存到數據庫並顯示回uilabel

下面是我用來支持表情符號的代碼,之後沒有顯示阿拉伯文字。

+(NSString *)emojiToSave:(NSString *)str 
{ 
    NSData *dataForEmoji = [str dataUsingEncoding:NSNonLossyASCIIStringEncoding]; 
    NSString *encodevalue = [[NSString alloc]initWithData:dataForEmoji encoding:NSUTF8StringEncoding]; 
    return encodevalue; 
} 
+(NSString *)emojiToDisplay:(NSString *)str 
{ 
    NSData *msgData = [str dataUsingEncoding:NSUTF8StringEncoding]; 
    NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSNonLossyASCIIStringEncoding]; 
    return goodMsg; 
} 

任何人都可以建議支持阿拉伯語我應該做什麼改變?

在此先感謝。

+0

你能舉個例子嗎? –

+0

「مرحبا你好」 同樣的例子,我給了問題標題也。 –

+0

給出的解決方案,base64代碼包含在ASCII中,它應該被所有類型的數據庫接受,如MySql,SQLite,Sql Server等。詳細信息請參見以下答案。 –

回答

1

嘗試將其轉換成BASE64編碼,然後插入的base64編碼數據庫:

//Original string to base64 string 
NSString *emojiString = @"مرحبا Hello"; 
NSData *emojiData = [emojiString dataUsingEncoding:NSUTF8StringEncoding]; 
NSString *base64String = [emojiData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; 

//Base64 string to original string 
NSData *base64Data = [[NSData alloc] initWithBase64EncodedString:base64String options:NSDataBase64DecodingIgnoreUnknownCharacters]; 
NSString *originalString =[[NSString alloc] initWithData:base64Data encoding:NSUTF8StringEncoding]; 

NSLog(@"Result: %@",originalString); 

輸出: enter image description here

+1

OPs代碼的問題在於他混合了ASCII和UTF8編碼... – Michael

+0

是的。但是數據庫可能不支持表情符號代碼,就像沒有utf8mb4的MySql無法將表情符號代碼保存到表格中一樣。所以Base64代碼對於這種情況是一個相當大的選擇。 –

+0

對於排序或全文搜索等內容,明文優先於base64。最好用一個'ALTER'語句修復該列的數據庫編碼,而不是使用base64錘子 – Michael

1

你必須使用支持表情圖案和阿拉伯字符的編碼。 ASCII不支持。

你應該使用NSUTF8StringEncoding無處不在,你很好。

爲什麼你反正用ASCII?你爲什麼要將字符串轉換爲NSData,然後再轉換回NSString?這沒有意義。

相關問題