无效的 UTF-8 字符串在移动端引发的问题
C++ 返回的 char* 字符串(utf-8)中,夹杂了一些无效的字符,在移动端引发了一些问题。表现为:在 Android 端,引发了 JNI 异常:
env->NewStringUTF(data):
JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0xe6
而在 iOS 端,则为
[NSString stringWithUTF8String:data]
的返回值为 nil
在 Android 端,这个BUG有人向 google 提交了 issue,暂还没有得在解决。目前的解决办法是多做一步转换,先将 char* 转为 JByteArray,再转成jString:
1 | //int size, char* data |
而在 iOS端,则可以使用 libiconv 将 UTF-8 字符串转为 GBK,再转为 UTF-8 字符串,转换时,使用 “//IGNORE” 选项忽略无效的字符,即可。