我遇到了这样一个java字符串,下面是false
body.equals(new String(body.getBytes()));我想这是因为在默认情况下,字符串构造函数将body byte[]的编码处理为UTF-8,所以我不能100%确定。我如何能够将该字符串存储在byte[]中,并在稍后将其转换回来?我想我需要能够确定byte[]的编码方式。我该怎么做?
一些上下文:我需要byte[],这样我就可以压缩数据,将其存储在db中,然后解压缩并将未压缩的byte[]转换回原始字符串。这个字符串最初来自某个库,它下载了一个网页,我不知道他们在把它交给我之前对这个字符串做了什么处理。
发布于 2012-10-16 22:05:38
只需确保两种方式都使用相同的字符集--从字符串创建字节数组时,以及从字节数组创建字符串时。
所以你的例子会更好,因为:
body.equals(new String(body.getBytes("utf-8"), "utf-8"));这将保证,无论环境如何,字节都将被理解。
几乎毫无疑问,您还应该使用unicode。如果您选择一个单字节编码(例如,一个ISO代码页),您可能会后悔在未来,即使有一个单字节编码,满足您现在的需要。
发布于 2012-10-16 22:10:11
平台默认字符集用于编码和解码。
问题是,字符集可能是有限的,例如美国ASCII。如果字符串中的一个字符在该字符集之外,我们就会失去它。
使用覆盖所有unicode字符的字符集,例如UTF-8、UTF-16。
发布于 2012-10-16 22:08:59
在没有指定编码的情况下,在字节和字符之间进行转换时,行为与平台有关.默认编码是在JVM范围内使用的,取决于您的系统。我不知道如果编码是ASCII并且有一些非ASCII字符会发生什么,但是我知道你会得到一个不同的字符串。您每次音乐会时都需要指定编码以避免这种情况。
https://stackoverflow.com/questions/12924091
复制相似问题