異なるエンコーディングでエンコードされた2つの異なる文字列は、同じバイトシーケンスを持つことができますか?つまり、以下の例の「文字列1」と「文字列2」は、2つの異なるエンコーディング(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でサポートされているエンコーディング専用であり、一部の構成されたエンコーディングではサポートされていません。