一、背景:H5端用户评论中包含表情包,通过JSBridge 传递给客户端,Android Base64解码之后,显示乱码(是菱形+问号)。小程序和iOS可以正常解码出表情。用Base64在线编码解码(Base64 在线编码解码 | Base64 加密解密 - Base64.us)也可以解码出表情包。
二、逻辑梳理:H5端获取到用户的评论之后,转json,Base64编码。
Android:获取到H5端传过来的字符串之后,Base64解码,解码出来的表情包乱码,小程序和iOS可以正常解码出表情。
附:Android Base64解码用的是 org.apache.commons.codec.binary.Base64
三、尝试的办法:都不行,都失败了。
1、编码格式
a、GB2312
b、UTF-8
c、UTF-16
2、Base64 的类
a、android.util.Base64
b、org.apaches.commons.codec.binary.Base64
c、java.util.Base64
3、其他解码库
a、StringEscapeUtils::unescapeJava
库implementation 'org.apache.commons:commons-lang3:3.4'
b、Base64
库 Apache commons codec
Android日常开发(23)Android使用commons-codec 进行编码和解码操作java.lang.NoSuchMethodError: No static method_android之commons-codec_像一只小蜗牛的博客-CSDN博客
四、最终解决办法:(可行的)
第一步、H5端在获取到用户评论的信息之后,先转Unicode ,再进行json,Base64。
第二步、Android端获取到H5端传过来的字符串之后,Base64解码,此时对应的用户评论信息是unicode码。Android再进行unicode解码,OK了。可以正常显示表情包了。
Android端
Base64解码工具:org.apache.commons.codec.binary.Base64
Unicode解码工具参考下面的大佬
参考大佬的博客:android如何将字符串\u67e5\u8be2\u6210\u529f转换成中文_android unicode转中文_鸟儿不吃草的博客-CSDN博客