Русский текст в javascript

138
25 декабря 2021, 03:00

Получаю с помощью AJAX запроса русский текст с сервера. Пытаюсь вывести. Получаю это: Экстренная остановка Подскажите пожалуйста, как привести текст в нормальный вид.

Answer 1

Это проблема несоответствия кодировок символов.
Текст изначально в "нормальном" виде (UTF-8), а вот документ - в "ненормальном" (Windows-1251): поэтому и искажается отображение текста при его выводе.

Наиболее разумным решением будет использовать в документе кодировку utf-8, в соответствии с требованиями актуального стандарта HTML5:

<!DOCTYPE html>
<html lang="ru">
  <head>
    <meta charset="utf-8">
    <!-- ... -->
  </head>
  <body> 
    <!-- ... -->
  </body>
</html>


Если же проблема в некорректном определении кодировки ответа сервера (когда данные фактически в utf-8, но приходят как windows-1251), можно ее переопределить:

xhrInstance.overrideMimeType('<MIME-тип>; charset=utf-8'); 

Демо:

const url = 'http://urlecho.appspot.com/echo' + queryString({ 
  'Content-Type': 'text/plain; charset=windows-1251',  
  body: 'Экстренная остановка',  
});  
 
(async () => { 
  console.log('Без переопределения:\n', await getRequest(url));  
  console.log('С переопределением:\n', await getRequest(url,  
    xhr => xhr.overrideMimeType('text/plain; charset=utf-8') 
  ));  
})();  
 
 
function getRequest(url, beforeSend) { 
  return new Promise(resolve => { 
    const xhr = new XMLHttpRequest();  
    xhr.addEventListener('loadend', function () { 
      resolve(this.responseText);  
    });  
    xhr.open('GET', url);  
    if (beforeSend) beforeSend(xhr);  
    xhr.send();  
  });  
} 
 
function queryString(obj) { 
  return '?' + Object.entries(obj).map( 
    ([p, v]) => `${p}=${encodeURIComponent(v)}` 
  ).join('&');  
}

READ ALSO
Javascript Array перебрать массив

Javascript Array перебрать массив

У меня динамически можно создавать группы, у каждой группы своя цена

122
Что влияет на правильную работу запроса в браузере?

Что влияет на правильную работу запроса в браузере?

На html-странице есть кнопка, при нажатии на которую посылаются определенные запросыНо за первым компьютером один из запросов перенаправляет...

101
Как дождаться окончания transition

Как дождаться окончания transition

Есть вёрстка - https://mihinovgithub

203
Должны ли Entity-классы реализовывать Serializable

Должны ли Entity-классы реализовывать Serializable

Смотря старые видео и статьи по Hibernate обнаружил, что все Entity в их примерах реализуют интерфейс SerializableОдин парень на видео даже сказал, что...

132