2017-07-02 51 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?这没有意义。

相关问题