Konwersja ATASCII/ UTF-8.

Na podstawie tablicy konwersji z patcha Mono do libiconv, napisałem skrypt w Pythonie do konwersji do i z ATASCII. Może się komuś przyda :).

#!/usr/bin/python3
import sys

if len(sys.argv) != 3:
    print("Usage:", sys.argv[0], "-u (to unicode) || -a (to atascii)")
    exit(0)

d = {0: 9829, 1: 9500, 2: 9621, 3: 9496, 4: 9508, 5: 9488, 6: 9585, 7: 9586, 8: 9698,
    9: 9623, 10: 9699, 11: 9629, 12: 9624, 13: 9620, 14: 9601, 15: 9622, 16: 9827,
    17: 9484, 18: 9472, 19: 9532, 20: 9679, 21: 9604, 22: 9615, 23: 9516, 24: 9524,
    25: 9612, 26: 9492, 27: 9243, 28: 8593, 29: 8595, 30: 8592, 31: 8594, 32: 32,
    33: 33, 34: 34, 35: 35, 36: 36, 37: 37, 38: 38, 39: 39, 40: 40, 41: 41, 42: 42,
    43: 43, 44: 44, 45: 45, 46: 46, 47: 47, 48: 48, 49: 49, 50: 50, 51: 51, 52: 52,
    53: 53, 54: 54, 55: 55, 56: 56, 57: 57, 58: 58, 59: 59, 60: 60, 61: 61, 62: 62,
    63: 63, 64: 64, 65: 65, 66: 66, 67: 67, 68: 68, 69: 69, 70: 70, 71: 71, 72: 72,
    73: 73, 74: 74, 75: 75, 76: 76, 77: 77, 78: 78, 79: 79, 80: 80, 81: 81, 82: 82,
    83: 83, 84: 84, 85: 85, 86: 86, 87: 87, 88: 88, 89: 89, 90: 90, 91: 91, 92: 92,
    93: 93, 94: 94, 95: 95, 96: 9830, 97: 97, 98: 98, 99: 99, 100: 100, 101: 101,
    102: 102, 103: 103, 104: 104, 105: 105, 106: 106, 107: 107, 108: 108, 109: 109,
    110: 110, 111: 111, 112: 112, 113: 113, 114: 114, 115: 115, 116: 116, 117: 117,
    118: 118, 119: 119, 120: 120, 121: 121, 122: 122, 123: 9824, 124: 124, 125: 8624,
    126: 9664, 127: 9654, 128: 9829, 129: 9500, 130: 9609, 131: 9496, 132: 9508,
    133: 9488, 134: 9585, 135: 9586, 136: 9700, 137: 9627, 138: 9701, 139: 9625,
    140: 9631, 141: 9607, 142: 9601, 143: 9628, 144: 9827, 145: 9484, 146: 9472,
    147: 9532, 148: 9679, 149: 9600, 150: 9615, 151: 9516, 152: 9524, 153: 9616,
    154: 9492, 155: 10, 156: 8593, 157: 8595, 158: 8592, 159: 8594, 160: 9608,
    161: 33, 162: 34, 163: 35, 164: 36, 165: 37, 166: 38, 167: 39, 168: 40, 169: 41,
    170: 42, 171: 43, 172: 44, 173: 45, 174: 46, 175: 47, 176: 48, 177: 49, 178: 50,
    179: 51, 180: 52, 181: 53, 182: 54, 183: 55, 184: 56, 185: 57, 186: 58, 187: 59,
    188: 60, 189: 61, 190: 62, 191: 63, 192: 64, 193: 65, 194: 66, 195: 67, 196: 68,
    197: 69, 198: 70, 199: 71, 200: 72, 201: 73, 202: 74, 203: 75, 204: 76, 205: 77,
    206: 78, 207: 79, 208: 80, 209: 81, 210: 82, 211: 83, 212: 84, 213: 85, 214: 86,
    215: 87, 216: 88, 217: 89, 218: 90, 219: 91, 220: 92, 221: 93, 222: 94, 223: 95,
    224: 9830, 225: 97, 226: 98, 227: 99, 228: 100, 229: 101, 230: 102, 231: 103,
    232: 104, 233: 105, 234: 106, 235: 107, 236: 108, 237: 109, 238: 110, 239: 111,
    240: 112, 241: 113, 242: 114, 243: 115, 244: 116, 245: 117, 246: 118, 247: 119,
    248: 120, 249: 121, 250: 122, 251: 9824, 252: 124, 253: 8624, 254: 9664, 255: 9654}

mode=0

if sys.argv[1] == '-u':
 f = open(sys.argv[2], 'rb')
 output=str()
 mode=1
else:
 f = open(sys.argv[2], 'r', encoding='utf-8')
 output=bytearray()

def overwrite():
  if mode==1:
   f = open(sys.argv[2], 'w', encoding='utf-8')
  else:
   f = open(sys.argv[2], 'bw')
  f.write(output)
  f.close()

lines = f.read()
f.close()

if mode==1:
 for i in lines:
  if i in d:
   output+=chr(d[i])

if mode == 0:
 import collections
 sd = collections.OrderedDict(sorted(d.items()))
 dinv = {}
 for k,v in sd.items():
  if v not in dinv:
   dinv[v] = k
 for i in lines:
  if ord(i) in dinv:
   output.append(dinv[ord(i)])

overwrite()

A tutaj statyczne binarki iconv dla Linuksa i Windows z najnowszym patchem dodającym kodowania:

ATARI ATARIST RISCOS-LATIN1 ATARI8 ATARI8-ATASCII ATARI8-GRAPH ATASCII ATARI8-ATASCII2 ATARI8-INT  ATASCII2 ATARI8-KAREN ATARI8-PL ATARI8-AWP ATARI8-XLENT ATARI8-PANTHER ATARI8-PE ATARI8-CAPEK ATARI8-CZ ATARI8-TCHEKO ZX80 ZX 81 ZX82 ZXSPECTRUM ZX82-PL ZXSPECTRUM-PL PETSCII PETSCII-UC PETSCII-LC CP867 CP895 KAMENICKY  KEYBCS2 

2 uwagi do wpisu “Konwersja ATASCII/ UTF-8.

  1. Pingback: Atari Action! | greblus:~$ cat /dev/random > /dev/null 2>&1

  2. Pingback: Cython – Tworzenie statycznych binarek z programów w Pythonie dla Windows. | greblus:~$ cat /dev/random > /dev/null 2>&1

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s