使用不同编码编码的两个不同字符串可以具有相同的字节序列吗?即以下示例中的一些“字符串一”和“字符串二”在使用两种不同的编码(Cp1252 和 UTF-8 只是示例)进行编码时会导致测试通过吗?
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import org.junit.Assert;
import org.junit.Test;
public class EncodingTest {
@Test
public void test() throws UnsupportedEncodingException {
final byte[] sequence1 = "string one".getBytes("Cp1252");
final byte[] sequence2 = "string two".getBytes("UTF-8");
Assert.assertTrue(Arrays.equals(sequence1, sequence2));
}
}
我的代码中的一个错误对使用 JVM 的默认编码的字符串生成的字节序列进行哈希处理,我需要验证当代码使用不同的字符串和不同的 JVM 文件编码运行时是否会导致哈希冲突(在 Windows 和 Linux 上运行时可能会发生这种情况例如)。
由于编码是字节序列和字符之间的映射,我认为可能有一些字符串和编码通过了上述测试。但只是想知道是否有任何众所周知的例子或一些很好的理由说明为什么我不应该依赖哈希冲突不会发生。
谢谢
PS:这仅适用于 JDK 1.6 支持的编码,而不是某些编造的编码。