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

 他的一个号码_616 发布于 2022-11-03 18:03

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

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

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

原来的昵称是:

显示结果是:

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

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

    2022-11-06 04:17 回答
  • 目前得出的答案是数据库没有添加 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;
    }
    
    2022-11-06 04:18 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有