Где в онлайн можно посмотреть и преобразовать кодировку сайта?
У меня есть сайт кодировку которого я не знаю.
У меня 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 ( '' );
}