我遇到过这样一个java字符串,其中以下是 false :
body.equals(new String(body.getBytes()));
我想这是因为String构造函数默认将body byte []的编码视为UTF-8,我不是100%肯定。我怎样才能将这个字符串存储在byte []中并能够在以后将其转换回来?我想我需要能够确定byte []的编码方式。我该怎么做?
某些上下文:我需要byte []所以我可以压缩数据,将其存储在数据库中,然后解压缩并将未压缩的byte []转回原始字符串。该字符串最初来自一些下载网页的库,我不确定他们在将字符串处理之前对它进行了哪些处理。
答案 0 :(得分:2)
平台默认字符集用于编码和解码。
问题是,字符集可能有限,例如US-ASCII。如果字符串中的字符在该字符集之外,我们将丢失它。
使用涵盖所有unicode字符的字符集,例如UTF-8,UTF-16。
答案 1 :(得分:1)
确保在两种方式中使用相同的字符集 - 在从字节数组创建String时从String 和创建字节数组。
所以你的例子会更好:
body.equals(new String(body.getBytes("utf-8"), "utf-8"));
无论环境如何,这都将保证了字节的理解。
你也应该毫无疑问地使用unicode。如果您选择单字节编码(例如ISO代码页),您将来可能会后悔,即使现在有一个满足您需求的单字节编码。
答案 2 :(得分:1)
在不指定编码的情况下在字节和字符之间进行转换时,行为与平台有关。使用的默认编码是JVM范围的,取决于您的系统。我不知道如果编码是ASCII并且你有一些非ASCII字符会发生什么,但我知道你会得到一个不同的字符串。您需要在每次演唱时指定编码以避免这种情况。