gpt4 book ai didi

java - 在 Java 中对 Shift-JIS 字符使用 XOR

转载 作者:行者123 更新时间:2023-11-29 06:13:06 26 4
gpt4 key购买 nike

所以我正在尝试编写一个小的解密程序,但遇到了一些小麻烦。我正在对带有“FF”的字符应用 XOR(反转所有位),我通过将字符串转换为字节数组然后对其应用 XOR 来做到这一点。但是这些字符采用 Shift-JIS 编码,有些东西不起作用。当我尝试使用普通字母的方法时,它似乎有效,但当它涉及到日文字符时,出现了问题。

public void sampleMethod(String a)
{
try {
String b = "FF";
byte[] c = a.getBytes("Shift_JIS");
byte[] d = b.getBytes("Shift_JIS");
byte[] e = new byte[50];
for (int i=0; i<c.length; i++)
{
e[i] =(byte)(c[i]^d[i%2]);
}
String t = new String(e, "Shift_JIS");
System.out.println(t);
}
catch (UnsupportedEncodingException e)
{
}

}

但是当我坚持使用日文字符时,它会将每个字符都转换为“yyyyyy”。我尝试打印出字节数组以查看问题所在,它显示每个字符都存储为“63”。我如何才能正确存储字符?实际上,我该如何对 Shift-JIS 字符使用 XOR?

我正在使用 XOR,因为我基本上只想将位从 0010 反转为 1101,然后将其改回字符。这可能吗?

谢谢

例如,这是我的输入:'始めましテ",我得到的是:"yyyyy"当我做类似“你好”的事情时,我得到“.#**)f2.#4#”

最佳答案

您根本无法对多字节字符执行这种按字节进行的操作。

日语字符(和其他扩展字符)通常由一系列字节表示。改变这些可能会产生无法正确解码的无效序列(我想这就是您看到的结果)。

来自维基百科文章,Shift JIS

only guarantees that the first byte will be high bit set (0x80–0xFF); the value of the second byte can be either high or low

我想通过 XOR'ing 你会破坏这个保证。

如果你想反转这些位并再次返回,请在内部使用 byte[] 数据类型,只有在你确定它是 Shift JIS 结构字节时才将其转回字符串数组。

关于java - 在 Java 中对 Shift-JIS 字符使用 XOR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6091330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com