papermario/tools/sjis.py
2020-12-02 15:13:17 +00:00

46 lines
1.1 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#! /usr/bin/python3
def decode(data):
length = 0
is_dbl_char = False
for byte in data:
if byte == 0 and not is_dbl_char:
break
# ignore null terminator when reading double-byte char
is_dbl_char = False
if byte & 0xF0 == 0x80:
is_dbl_char = True
if byte & 0xF0 == 0x90:
is_dbl_char = True
if byte & 0xF0 == 0xE0:
is_dbl_char = True
if byte & 0xF0 == 0xF0:
is_dbl_char = True
length += 1
return data[:length].decode('shift-jis')
if __name__ == "__main__":
import sys
if len(sys.argv) <= 1:
print("usage: ./sjis.py <bytes...>")
print("decodes zero-terminated SJIS from arbitrary hex bytes.")
print("e.g.")
print(" ./sjis.py 80072F64 80072F90 80072FA8 00000000")
print(" エリア その1")
exit(1)
s = "".join(sys.argv[1:])
data = bytearray()
for i in range(0, len(s), 2):
byte = eval(f"0x{s[i]}{s[i + 1]}")
data.append(byte)
print(data)
print(decode(data))