Bread09
@Bread09
Newonkiy

При преобразовании текста в кодировку windows-1251 не корректно меняется «Ё». Что делать?

Преобразовываю строку в жс с utf8 => windows-1251(ANSI, CP1251). Вроде все символы переводятся хорошо, кроме буквы Ё. Она превращается то в E1 или в @1

html
<a class="dwld-upd" tabindex="0">
        <span class="txt">скачать</span>
    </a>


JS
//   Кодировщик 3
  var encodeCP1251 = function (string) {
    function encodeChar(c) {
      var isKyr = function (str) {
        return /[а-я]/i.test(str);
      };
      var cp1251 = `ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬*®Ї°±Ііґµ¶·\
ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя`;
      var p = isKyr(c) ? cp1251.indexOf(c) + 128 : c.charCodeAt(0);
      var h = p.toString(16);
      if (h == "a") {
        h = "0A";
      }
      return "%" + h;
    }
    var res = "";
    for (var i = 0; i < string.length; i++) {
      res += encodeChar(string.charAt(i)); //ну или string[i]
    }
    return res;
  };

let perka = `<?xml version="1.0" encoding="windows-1251"?>
<Файл>
    ЁЁЁ абвгд
</Файл>`


  const link = document.querySelector(".dwld-upd");

  link.setAttribute("href", "data:text/plain;charset=windows-1251," + JSON.parse( JSON.stringify(encodeCP1251(perka))));
  link.setAttribute(
    "download",
    "file.xml"
  );
  link.classList.add("active");
  • Вопрос задан
  • 219 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для начала, ваша регулярка не обнаруживает буквы Ё и ё, поскольку они находятся в блоках расширения кириллицы, за пределами диапазона А-я. Правильно будет /a-яё/i
Ну и, возможно, следует учесть, что Ё !== Ё !== Ë.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы