Использование XOR для символов Shift-JIS в Java - PullRequest
1 голос
/ 23 мая 2011

Итак, я пытаюсь написать небольшую программу для расшифровки, но у меня небольшие проблемы.Я применяю XOR к символам с 'FF' (обращая все биты), и я делаю это, преобразовывая строку в байтовый массив, затем применяя к нему XOR.Но символы в кодировке Shift-JIS и что-то не работает.Когда я пытаюсь использовать метод с обычными буквами, кажется, что он работает, но когда дело доходит до японских символов, что-то идет не так.просто "гггггг".Я попытался распечатать массив байтов, чтобы увидеть проблему, и она показала, что каждый символ хранился как «63».Как получить символы для правильного хранения?На самом деле, как бы я использовал XOR для символов Shift-JIS?

Я использую XOR, потому что я просто хочу обратить биты, скажем, от 0010 до 1101, а затем изменить их обратно на символы.Это возможно?

Спасибо

Например, это был мой ввод: «始 め ま し て», и я получаю следующее: «ггггг» И когда я делаю что-то вроде «привет там», яget ". # **) f2. # 4 #"

1 Ответ

3 голосов
/ 23 мая 2011

Вы просто не можете выполнять подобные побайтовые манипуляции с многобайтовыми символами.

Японские символы (и другие расширенные символы) обычно представлены серией байтов. Изменение этих параметров, вероятно, приведет к неправильным последовательностям, которые не могут быть правильно декодированы (и я полагаю, что это те результаты, которые вы видите).

Из статьи в Википедии Shift JIS

только гарантирует, что для первого байта будет установлен старший бит (0x80–0xFF); значение второго байта может быть высоким или низким

Я бы подумал, что если XOR'инг нарушит эту гарантию.

Если вы хотите обратить биты и сделать это снова, работайте с внутренним типом данных byte[] и возвращайте его обратно в строку только тогда, когда вы уверены, что это структурированный байтовый массив Shift JIS.

...