Java toCharArray在Android 4.3和以前的Android SDK之间返回不同的结果

Java toCharArray在Android 4.3和以前的Android SDK之间返回不同的结果,java,android,utf-8,bytearray,arrays,Java,Android,Utf 8,Bytearray,Arrays,下面代码的字符串方法ToCharray的结果在Android4.3中是2,其他方法返回1,有人知道为什么吗 byte[] SECRET_BYTES = {(byte) 0xfc, (byte) 0xbc}; Log.i("string", "SECRET_BYTES - " + SECRET_BYTES.length); String txtPwd = new String(SECRET_BYTES, "UTF-8"); char[] charsPwd = tx

下面代码的字符串方法ToCharray的结果在Android4.3中是2,其他方法返回1,有人知道为什么吗

    byte[] SECRET_BYTES = {(byte) 0xfc, (byte) 0xbc};

    Log.i("string", "SECRET_BYTES - " + SECRET_BYTES.length);
    String txtPwd = new String(SECRET_BYTES, "UTF-8");
    char[] charsPwd = txtPwd.toCharArray();

    Log.i("string", "length of charsPwd - " + charsPwd.length);

字节序列
FCBC
在UTF-8中不构成有效字符:

  • FC
    是无效的起始字节,因为在允许的最大值为4时,设置了其6个最高位
  • BC
    是意外的连续字节;它前面没有有效的起始字节

我不确定它是两个无效字符还是一个;你可以对这两种情况都表示赞同。您可能不应该以任何方式依赖此行为。

谢谢,但即使开始字节不是FC,结果也是相同的,例如字节[]SECRET_BYTES={(字节)0x2d,(字节)0x1c,(字节)0x69,(字节)0xb0,(字节)0x27,(字节)0x46,(字节)0x32,(字节)0x6a,(字节)0xbc,(字节)0x1,(字节)0x30,(字节)0x1c,(字节)0x29,(字节)0xfc,(字节)0xbc};你说结果相同是什么意思?这些字节编码有效字符直到
B0
,这是无效的,因为它是一个没有起始字节的连续字节,然后是有效字符直到
BC
,另一个连续字节没有起始字节,依此类推。。。因此,解码该序列将为您提供一些有效字符。我已经将以下代码放在了4.3和以前的SDK之间,它们的工作方式似乎相同,您知道是什么吗?Charset cs=Charset.forName(“UTF-8”);ByteBuffer bb=ByteBuffer.allocate(字节.长度);bb.put(字节);bb.flip();CharBuffer cb=cs.解码(bb);他们一定改变了实施方式。处理格式错误的字符的方法在任何地方都没有这种精确程度的文档记录,因此他们可以根据自己的突发奇想进行更改。您不应该依赖于是否将具有无效UTF-8的字节序列解码为一个或多个替换字符。(你到底想做什么?字节不编码UTF-8文本,因此将它们解码为字符没有多大意义。)我正在尝试将字节数组转换为字符数组以进行比较,原始字节数组来自其他地方,我无法更改,所以我只想寻找一个可靠的解决方案,把它转换成一个字符数组