最终确认这是在Android 5.1以下 jstring – char数组 时出的问题。下面通过一个示例来还原这个过程。...通过调用getBytes()方法,会看到对应的byte数组为[-16, -97, -110, -117] ,按16进制输出为[f0, 9f, 92, 8b] 。...,把char数组的每一个元素按16进制输出。...在Android 7.1.2的测试机上,native层输出的结果为[f0, 9f, 92, 8b] ,与Java的byte数组是一样的,但是在Android 4.4.4的测试机上,输出结果为[ed, a0...UTF-8的规则是,对于占N个字节的符号(N 1),第一个字节前N位都是1,N+1位是0,后面的字节前2位为10,然后把Unicode的二进制位填入空缺的二进制位中,空出的位置补0。