СПК "Утро" Дмитровский район

Объявление

Форум садоводческого потребительского кооператива "Утро" (СПК "Утро") Дмитровский район Московской области.




Температура воздуха в СПК

за весь период измерений с 20.04.2021
Состояние КТП1
Состояние КТП2
Следующее измерение


Юрист в СПК "Утро"

Поиск по форуму от сервиса Яндекс:

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » СПК "Утро" Дмитровский район » Скрипт перекодировки с utf-8 на windows-1251


Скрипт перекодировки с utf-8 на windows-1251


Возникла необходимость перекодировать при помощи javascript с utf-8 на windows-1251, после того как у меня на странице вылезли "кракозябры", так как получал текст и ссылки на страницу в utf-8, а у меня страница в кодировке windows-1251.

Перерыв, на протяжении нескольких часов, Интернет не нашел ни одного скрипта на javascript для перекодировки с utf-8. Пришлось сотворить скрипт самому. Может окажется для кого-нибудь полезным.

Скачать скрипт перекодировки с utf-8 на windows-1251


<script type="text/javascript">

function utf8_decode(s) {
  var s_list = new Object();
s_list["110561032"] = 1059;s_list["110571027"] = 1089;
s_list["110578218"] = 1090;s_list["11056176"] = 1072;
s_list["110561030"] = 1074;s_list["110561038"] = 1057;
s_list["110561119"] = 1055;s_list["110561113"] = 1050;
s_list["110571026"] = 1088;s_list["110561109"] = 1086;
s_list["110568212"] = 1047;s_list["110561111"] = 1087;
s_list["11056181"] = 1077;s_list["11056177"] = 1073;
s_list["11056187"] = 1083;s_list["110571039"] = 1103;
s_list["110561112"] = 1084;s_list["110571036"] = 1101;
s_list["110561108"] = 1082;s_list["110561105"] = 1080;
s_list["110578225"] = 1095;s_list["110561029"] = 1085;
s_list["110571107"] = 1091;s_list["11056182"] = 1078;
s_list["110571034"] = 1100;s_list["110568250"] = 1051;
s_list["110578249"] = 1099;s_list["11056183"] = 1079;
s_list["110568470"] = 1081;s_list["110561116"] = 1053;
s_list["110561118"] = 1058;s_list["110561110"] = 1075;
s_list["1105632"] = 1056;s_list["11056160"] = 1056;
s_list["110578224"] = 1094;s_list["110561106"] = 1040;
s_list["110561169"] = 1076;s_list["11056152"] = 1048;
s_list["110578364"] = 1096;s_list["110578230"] = 1093;
s_list["110578240"] = 1097;s_list["110568221"] = 1044;
s_list["110571035"] = 1102;s_list["11056164"] = 1060;
s_list["110571033"] = 1098;s_list["110578222"] = 1092;
s_list["11056167"] = 1063;s_list["11056173"] = 1069;
s_list["110568217"] = 1042;s_list["110561115"] = 1054;
s_list["110568226"] = 1045;s_list["110578216"] = 1105;
s_list["110568216"] = 1041;s_list["110561028"] = 1066;
s_list["110568220"] = 1043;s_list["11056171"] = 1067;
s_list["110568211"] = 1046;s_list["11056172"] = 1068;
s_list["110568482"] = 1049;s_list["11056174"] = 1070;
s_list["110561114"] = 1052;s_list["110561031"] = 1071;
s_list["11056166"] = 1062;s_list["110561027"] = 1025;
s_list["110561025"] = 1064;s_list["110561168"] = 1061;
s_list["11056169"] = 1065;s_list["номер3байта"] = 8470;
s_list["тире3байта"] = 8211;
  var L = [] 
    for (var i=0;i<s.length; i++){
var ord = s.charCodeAt(i);
if((s.length-i)>=2){ if ((ord==1074)&&(s.charCodeAt(i+1)==8222)&&(s.charCodeAt(i+2)==8211)){i=i+2; ord='номер3байта'; L.push(String.fromCharCode(s_list[ord]))}}
if((s.length-i)>=2){ if ((ord==1074)&&(s.charCodeAt(i+1)==1026)&&(s.charCodeAt(i+2)==8220)){i=i+2; ord='тире3байта'; L.push(String.fromCharCode(s_list[ord]))}} 
if (ord<297){L.push(String.fromCharCode(ord))}else if ((ord!='номер3байта')&&(ord!='тире3байта')){
i++
ord='1'+ord+s.charCodeAt(i)

if (s_list[ord]== undefined) {L.push(String.fromCharCode(63))}else{        

        L.push(String.fromCharCode(s_list[ord]))}}}
    return L.join('')
}</script>

Функция вызывается с передачей в качестве параметра строки с "кракозябрами" и возвращает читабельную строку. В скрипте перекодируются все буквы русского алфавита, а вместо спецсимволов возвращаются знаки вопроса. Если необходима перекодировка всех символов, то в скрипт добавьте код вида:

s_list["1ххххуууу"] = zzzz; где:

xxxx-десятичный код первого символа utf-8

уууу-десятичный код второго символа utf-8

zzzz-десятичный код соответствующего символа windows-1251

Кроме этого необходимо учитывать, что в "кракозябре" есть еще знаки закодированные тремя символами. Для примера в скрипте перекодируются еще знаки № (номер) и - (короткое тире). Если скрипт встретит другой код из трех символов, то он собьётся в декодировании, так как будет считать по два символа. При такой ситуации в скрипте нужны изменения по аналоги с номером и тире.

P.S. Если строка не декодируется в читабельный текст, перед декодированием попробуйте отбросить первый символ "кракозябры" (если не поможет, то и второй), так как в "кракозябре" русские буквы закодированы двумя символами (а то и тремя символами), и если начать декодировать с середины символа, то пойдет сдвиг и результат будет не правильным.

Пример использования: сюда можете поместить свою "кракозябру"

Flag Counter

Вы здесь » СПК "Утро" Дмитровский район » Скрипт перекодировки с utf-8 на windows-1251


создать форум