用不同编码编码的两个不同的字符串是否可以具有相同的字节序列? 即当使用两种不同的编码进行编码时,下面示例中的一些“字符串一”和“字符串二” (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 的默认编码对从 String 生成的字节序列进行哈希处理,我需要验证当代码使用不同的字符串和不同的 JVM 文件编码运行时是否会导致哈希冲突(这可能在运行时发生)例如 Windows 和 Linux)。
由于编码是字节序列和字符之间的映射,我认为可能有一些字符串和编码通过了上述测试。但只是想知道是否有任何众所周知的例子或一些充分的理由来说明为什么我不应该依赖于没有发生的哈希冲突。
谢谢
PS:这仅适用于 JDK 1.6 支持的编码,而不适用于某些编造的编码。
最佳答案
是的。举个简单的例子,编码为ISO-8859-1的字符串“¡”(倒置感叹号)和编码为ISO-8859-2的字符串“Ą”(大写A加ogoned)都成为单字节序列A1(十六进制)。当使用将字符映射到单个字节的非常简单的编码时,或多或少会发生这种情况;否则它们不会是不同的编码。当涉及更复杂的编码方案时,它肯定会发生。
关于java - 使用不同编码编码的两个不同字符串是否可以具有相同的字节序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11571632/