Skip to content

Instantly share code, notes, and snippets.

@zazaulola
Created September 23, 2022 21:30
Show Gist options
  • Save zazaulola/6908f36b767b7d811102c8df0aadd81c to your computer and use it in GitHub Desktop.
Save zazaulola/6908f36b767b7d811102c8df0aadd81c to your computer and use it in GitHub Desktop.
function koi8rToUtf8 ( buf ) {
if( buf instanceof ArrayBuffer ) {
buf = new Uint8Array ( buf );
}
if( ! Array.isArray ( buf ) ) {
buf = [ ... buf ];
}
const map = new Map ( [
[0x80,0x2500], [0x81,0x2502], [0x82,0x250C], [0x83,0x2510],
[0x84,0x2514], [0x85,0x2518], [0x86,0x251C], [0x87,0x2524],
[0x88,0x252C], [0x89,0x2534], [0x8A,0x253C], [0x8B,0x2580],
[0x8C,0x2584], [0x8D,0x2588], [0x8E,0x258C], [0x8F,0x2590],
[0x90,0x2591], [0x91,0x2592], [0x92,0x2593], [0x93,0x2320],
[0x94,0x25A0], [0x95,0x2219], [0x96,0x221A], [0x97,0x2248],
[0x98,0x2264], [0x99,0x2265], [0x9A,0x00A0], [0x9B,0x2321],
[0x9C,0x00B0], [0x9D,0x00B2], [0x9E,0x00B7], [0x9F,0x00F7],
[0xA0,0x2550], [0xA1,0x2551], [0xA2,0x2552], [0xA3,0x0451],
[0xA4,0x2553], [0xA5,0x2554], [0xA6,0x2555], [0xA7,0x2556],
[0xA8,0x2557], [0xA9,0x2558], [0xAA,0x2559], [0xAB,0x255A],
[0xAC,0x255B], [0xAD,0x255C], [0xAE,0x255D], [0xAF,0x255E],
[0xB0,0x255F], [0xB1,0x2560], [0xB2,0x2561], [0xB3,0x0401],
[0xB4,0x2562], [0xB5,0x2563], [0xB6,0x2564], [0xB7,0x2565],
[0xB8,0x2566], [0xB9,0x2567], [0xBA,0x2568], [0xBB,0x2569],
[0xBC,0x256A], [0xBD,0x256B], [0xBE,0x256C], [0xBF,0x00A9],
[0xC0,0x044E], [0xC1,0x0430], [0xC2,0x0431], [0xC3,0x0446],
[0xC4,0x0434], [0xC5,0x0435], [0xC6,0x0444], [0xC7,0x0433],
[0xC8,0x0445], [0xC9,0x0438], [0xCA,0x0439], [0xCB,0x043A],
[0xCC,0x043B], [0xCD,0x043C], [0xCE,0x043D], [0xCF,0x043E],
[0xD0,0x043F], [0xD1,0x044F], [0xD2,0x0440], [0xD3,0x0441],
[0xD4,0x0442], [0xD5,0x0443], [0xD6,0x0436], [0xD7,0x0432],
[0xD8,0x044C], [0xD9,0x044B], [0xDA,0x0437], [0xDB,0x0448],
[0xDC,0x044D], [0xDD,0x0449], [0xDE,0x0447], [0xDF,0x044A],
[0xE0,0x042E], [0xE1,0x0410], [0xE2,0x0411], [0xE3,0x0426],
[0xE4,0x0414], [0xE5,0x0415], [0xE6,0x0424], [0xE7,0x0413],
[0xE8,0x0425], [0xE9,0x0418], [0xEA,0x0419], [0xEB,0x041A],
[0xEC,0x041B], [0xED,0x041C], [0xEE,0x041D], [0xEF,0x041E],
[0xF0,0x041F], [0xF1,0x042F], [0xF2,0x0420], [0xF3,0x0421],
[0xF4,0x0422], [0xF5,0x0423], [0xF6,0x0416], [0xF7,0x0412],
[0xF8,0x042C], [0xF9,0x042B], [0xFA,0x0417], [0xFB,0x0428],
[0xFC,0x042D], [0xFD,0x0429], [0xFE,0x0427], [0xFF,0x042A],
] );
return buf.map ( c => c < 127 ? c : map.get ( c ) || 0 )
.map ( c => String.fromCharCode ( c ) ).join ( '' );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment