想要将此字符串“مرحباHello”保存到数据库并显示回uilabel

时间:2017-07-02 09:41:35

标签: ios objective-c nsstring nsstringencoding

我正在寻找解决方案,我想存储英文+阿拉伯语+表情符号字符存储到数据库并在显示时将其检索回来。

下面是我用来支持表情符号的代码,之后没有显示阿拉伯文字。

+(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;
}

任何人都可以建议支持阿拉伯语我应该做些什么改变?

提前致谢。

2 个答案:

答案 0 :(得分: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 :(得分:1)

您必须使用支持表情符号和阿拉伯字符的编码。 ASCII不支持。

你应该到处使用NSUTF8StringEncoding,你没事。

为什么要使用ASCII呢?为什么要将字符串转换为NSData,然后再将其转换回NSString?这没有意义。