Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android操作系统版本中的不同字符集_Java_Android_Character Encoding - Fatal编程技术网

Java Android操作系统版本中的不同字符集

Java Android操作系统版本中的不同字符集,java,android,character-encoding,Java,Android,Character Encoding,我正在为加密编写一个AES代码,我以不同的方式实现了不同版本的Android encrypt。我花了一些时间在谷歌上阅读了一些关于getBytes的信息,这些字节受系统中的字符集的约束,因此加密的字符串是不同的 我从log.iCharset、Charset.defaultCharset.toString记录信息 在安卓2.3上,它说: 安卓2.2说: 安卓4.x说: Android 2.3和4.x加密/解密字符串的结果相同,但2.2不同 如何处理getBytes以使其与所有版本一致?您可以将编码

我正在为加密编写一个AES代码,我以不同的方式实现了不同版本的Android encrypt。我花了一些时间在谷歌上阅读了一些关于getBytes的信息,这些字节受系统中的字符集的约束,因此加密的字符串是不同的

我从log.iCharset、Charset.defaultCharset.toString记录信息

在安卓2.3上,它说:

安卓2.2说:

安卓4.x说:

Android 2.3和4.x加密/解密字符串的结果相同,但2.2不同

如何处理getBytes以使其与所有版本一致?

您可以将编码传递给getBytes。例如:

String myString = "test";
byte[] bytes = myString.getBytes("UTF-8");
有关支持值的列表,请参阅:

编辑
我懂了。但我不明白为什么不同版本的Android加密方式不同。即使它使用不同的库,标准也应该是相同的…奇怪。也许你可以尝试实现你自己的getBytes,那么它在所有版本上的工作方式都完全相同。我找到了这个示例:

嗨,我知道传递编码部分。如果您查看Charset.defaultCharset的输出,那么UTF-8.Hi中的所有内容都很有趣。我使用stringToBytesUTFCustomString str在您的链接中尝试了该示例,但它们的加密/解密方式仍然不同。不幸的是,我只有一部物理电话,所以我无法确认为什么我会得到这个结果。希望它仅限于emulator,但它确实显示了一个潜在的陷阱,还是一个潜在的Android bug?我在真正的Android硬件上试过,看起来是一样的。虽然这是可以的,但如果有人升级他们的手机,并使用相同的应用程序使用不同的字符集返回结果对使用不同手机加密的文件进行解密,则会出现问题。
06-26 16:05:19.140: I/Charset(737): com.ibm.icu4jni.charset.CharsetICU[UTF-8]
06-26 15:53:17.770: I/Charset(16957): java.nio.charset.CharsetICU[UTF-8]
String myString = "test";
byte[] bytes = myString.getBytes("UTF-8");