Где в онлайн можно посмотреть и преобразовать кодировку сайта?

У меня есть сайт кодировку которого я не знаю.

У меня node.js. Как я могу узнать кодировку текста что бы его преобразовать ?

https://zababurinsv.github.io/Michurin/maps/index.html


Ответы (1 шт):

Автор решения: DiD

У вас кодировка в метатегах на сайте стоит WINDOWS-1251. А в настройках web-сервера в заголовках отправляет отображать как UTF-8. По факту - кодировка KOI8-R.

Я даже вам напишу функцию, которая переконвертирует любой текст из KOI8-R в UTF-8.

Версия для PHP.

<? 
function chr_utf8 ( $num ) {   
  if ( $num < 128 ) {
    return chr ( $num );
  }
  if ($num < 2048) {
    return chr ( ( $num >> 6 ) + 192 ) . 
           chr ( ( $num & 63 ) + 128 ); 
  }
  if ($num < 65536) {
    return chr ( ( $num >> 12 ) + 224 ) . 
           chr ( ( ( $num >> 6 ) & 63 ) + 128 ) . 
           chr ( ( $num & 63 ) + 128 );
  }
  if ($num < 2097152) {
    return chr ( ( $num >> 18 ) + 240 ) . 
           chr ( ( ( $num >> 12 ) & 63 ) + 128 ) . 
           chr ( ( ( $num >> 6 ) & 63 ) + 128 ) . 
           chr ( ( $num & 63 ) + 128 );
  }
  return '';
}
function koi8r_utf8 ( $str ) {
  $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, 
  ];
  $res = '';
  $len = strlen ( $str );
  for ( $i = 0; $i < $len; $i ++ ) {
    $ccode = ord ( $str [ $i ] );
    $ucode = $ccode < 128 ? $ccode : $map[$ccode];
    $res .= chr_utf8 ( $ucode );
  }
  return $res;
}

Версия для JavaScript.

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 ( '' );
}
→ Ссылка