-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Android]WXStreamModule获取emoji表情问题 #1249
Comments
weex android目前不支持emoji,会crash。 @zjutkz |
@YorkShen 你的意思是即使能解析的出来,在对应的Text组件里使用了emoji就会crash吗?(没看过text组件的源码,不太清楚这方面的逻辑),如果是的话,之后会支持吗? |
@YorkShen 关于emoji的问题,当我在通过stream.fetch去获取网络数据之后,在WXStreamModule的对应成功回调中打断点,发现得到的数据是这样的 |
emoji不是modified UTF-8字符,Android NDK只支持Modified UTF-8,处理其他UTF-8字符,会出现异常现象。 https://developer.android.com/training/articles/perf-jni.html#UTF_8_and_UTF_16_strings @zavakid |
@YorkShen OK,thanks |
参考这个commit, android 6.0 ndk不会crash,6.0以下的版本有可能crash。考虑使用byte[]数组进行数据通讯,绕过这个问题,参考这个提交,目前还没有验证64位系统和jni泄露 https://github.com/sospartan/weex/tree/android-bugfix-utf-8 。这个issue先关闭,进度跟踪 Ref #350 @zjutkz |
如果通过stream去请求数据,type设置成json,并且后台接口返回的数据中包含emoji表情的话,emoji会解析失败,并且在特定情况下会造成json的解析失败。
原因是因为在WXStreamModule的fetch方法中,当走到成功的回调以后,会调用readAsString方法去将byte数组转换成String:
String respData = readAsString(response.originalData, headers!=null?headers.get("Content-Type"):"" );
在转化的过程中emoji是无法解析的,这是第一个问题。
第二问题是在特定情况下偶发的,如果这个emoji是位于字符串的最后一个位置,那么在byte[]转化成String的过程中,后引号会丢失,就像这样:
后台下发的是"xxxxxxxxx😄",通过byte[]换成成String之后,变成了"xxxxxxxxxxxo쌩Ģ,可以看到后引号丢失了。
所以我的建议是
resp.put("data",options.getType() != Options.Type.text? JSONObject.parse(respData):respData);
在转化成json的时候,入参不要是String,fastJson提供了入参是byte[]的方法,直接用比较合适。
至于转换成String之后emoji丢失的情况。。。貌似没什么好的办法。
The text was updated successfully, but these errors were encountered: