微信昵称中的 Emoji 字符在授权后的 iOS 应用中显示乱码


公司的一款 iOS 应用能够使用微信授权认证登录注册, 然后把微信的用户昵称设置为注册用户的默认昵称.

目前遇到的问题是, 在微信那边用户名可以插入 Emoji 表情, 可是那些表情到我们应用这边就全部乱码了.

现在想知道有什么方法可以使微信那边的昵称可以完整的显示在这边 iOS 应用上, 不打算过滤掉那些 Emoji 字符.

原来的昵称是:
clipboard.png

显示结果是:
clipboard.png

ios emoji 微信开放平台 乱码 微信授权auth2

虐灯狂人爱迪生 10 years ago

看下字符串的编码是不是正常的,还有可能是字符串格式的问题。

不要和我说话 answered 10 years ago

没写过iOS程序,个人看法是,微信也是用 字符 来存储这种加了表情的昵称,然后 可能恰好 这个 字符 到了iOS系统变成了另一个表情。
等高手。

likeclj answered 10 years ago

目前得出的答案是数据库没有添加 Emoji 支持, 导致从微信那边获取过来的带有 Emoji 表情的昵称出现乱码, 有两种解决方式:

1.是给数据库添加 Emoji 支持, 在 SO 上有 解决的方法
2.在用户进行注册时把获取过来的乱码过滤掉, 只留下正常的字符, 过滤我使用了下面的方法, 代码比较简陋, 但可以正常使用:


 - (NSString*)removeEmoji:(NSString *)username {

    NSString *regex = @"^[a-zA-Z0-9_\u4e00-\u9fa5]+$";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    NSString *temp = nil;

    for(int i = 0; i < [username length]; i++)
    {
        temp = [username substringWithRange:NSMakeRange(i, 1)];
        if ([predicate evaluateWithObject:temp]) {
            NSLog(@"%@", temp);
            NSLog(@"This character is OK");
        } else {
            NSRange range = NSMakeRange(i, 1);
            username = [username stringByReplacingCharactersInRange:range withString:@" "];
        }
    }

    NSString *withoutEmojiUsername = [username stringByReplacingOccurrencesOfString:@" " withString:@""];

    return withoutEmojiUsername;
}

allfou answered 10 years ago

Your Answer