papermario/tools/sjis.py

48 lines
1.1 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python3
2020-12-02 16:13:17 +01:00
2020-12-02 16:13:17 +01:00
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")
2020-12-02 16:13:17 +01:00
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))