Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.11.2018, 13:45
Аспирант
Отправить личное сообщение для Svorg Посмотреть профиль Найти все сообщения от Svorg
 
Регистрация: 16.11.2018
Сообщений: 38

Fetch и кириллица (���)
Отказался от XMLHttpRequest в пользу Fetch.
Возникла непонятка. Вот делаю:
let T = await (await fetch(url, params)).text();
и получаю вместо кириллицы такое: ����������

Для начала - а почему через XMLHttpRequest такого вот не было?
Ну и как корректнее это поправить? Почему оно само не разобралось (в ответе же по идее указывается кодировка)? Или только вручную допиливать?

Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 22.11.2018, 13:52
Аспирант
Отправить личное сообщение для Svorg Посмотреть профиль Найти все сообщения от Svorg
 
Регистрация: 16.11.2018
Сообщений: 38

Запрвшиваю одно и то же, с тем же body, делаю с заголовком:
Цитата:
content-type: application/x-www-form-urlencoded
Ответ через fetch() приходит с:
Цитата:
content-type: text/html; charset=windows-1251
Ответ через XMLHttpRequest приходит с:
Цитата:
content-type: text/plain; charset=windows-1251
Ответить с цитированием
  #3 (permalink)  
Старый 22.11.2018, 13:54
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,823

У вас каша на сервер приходит или именно в ответе?

Последний раз редактировалось Nexus, 22.11.2018 в 13:57.
Ответить с цитированием
  #4 (permalink)  
Старый 22.11.2018, 13:59
Аспирант
Отправить личное сообщение для Svorg Посмотреть профиль Найти все сообщения от Svorg
 
Регистрация: 16.11.2018
Сообщений: 38

Серверу всё нормально, в консоли Chrome видно что ответ корректный.
Только ответ приходит видимо в windows-1251, а fetch.text() этого кажется в упор не понимает/не замечает...
Ответить с цитированием
  #5 (permalink)  
Старый 22.11.2018, 14:20
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

Svorg, и получаю вместо кириллицы такое

Где ты получаешь, на странице, в консоле?

Если на странице, то какая кодировка страницы?

Сервер настроен с какой кодировкой?

Да ) и в утф-8 надо все делать...
Ответить с цитированием
  #6 (permalink)  
Старый 22.11.2018, 15:12
Аспирант
Отправить личное сообщение для Svorg Посмотреть профиль Найти все сообщения от Svorg
 
Регистрация: 16.11.2018
Сообщений: 38

Сервер не мой. У меня-то всегда и всюду минимум UTF-8.
Кстати странно, что сервер разный content-type выдаёт... Зачем он это делает...

Делаю через XMLHttpRequest - беру его response или responseText - вывожу в консоль или в alert() - всё нормально.

Делаю через fetch - беру его text() - вывожу в консоль или в alert() - вместо кириллицы: �����.
Ответить с цитированием
  #7 (permalink)  
Старый 22.11.2018, 15:35
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

у тебя, что не запара, то чудеса прям какие-то...

ну посмотри внимательно, в консоле разработчика (хром), в разделе сеть, слева выбери отправленный запрос (может быть надо поменять фильтр), справа смотри отправленные/полученные заголовки

Screen Shot 2018-11-22 at 15.32.41.jpg https://imgur.com/a/DAWfu39

еще бы посмотреть params, что там с заголовками?
Ответить с цитированием
  #8 (permalink)  
Старый 22.11.2018, 15:43
Аспирант
Отправить личное сообщение для Svorg Посмотреть профиль Найти все сообщения от Svorg
 
Регистрация: 16.11.2018
Сообщений: 38

Я уже в #2 писал.

Добавил в fetch в headers параметр x-requested-with равный XMLHttpRequest - стало вообще всё одинаково.
Только кодировка кривая.

Body.text()
Сообщение от MDN
The text() method of the Body mixin takes a Response stream and reads it to completion. It returns a promise that resolves with a USVString object (text). The response is always decoded using UTF-8.
А у меня там нифига не UTF-8... Что делать?
Ответить с цитированием
  #9 (permalink)  
Старый 22.11.2018, 16:12
Аспирант
Отправить личное сообщение для Svorg Посмотреть профиль Найти все сообщения от Svorg
 
Регистрация: 16.11.2018
Сообщений: 38

Короче при fetch задействуется какой-то ReadableStream.
И походу, получая поток данных, он считает его UTF-8 и ничем иным...
Ответить с цитированием
  #10 (permalink)  
Старый 22.11.2018, 16:15
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

тогда запрос с помощью сервера, там iconv и все свои fetch'и через этот сервер

если надо на стороне клиента, тогда надо понять в каком виде передается строка (urlencoded, т.е. русские буквы в виде %BB...), тогда надо руками сопоставить ) эти байты в виде utf... может быть тогда придется посмотреть чтобы fetch читал в arrayBuffer )...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не отображаются данные. fetch phoenix200689 Библиотеки/Тулкиты/Фреймворки 0 17.12.2017 23:43
Авторизация в ВК с помощью fetch() caseyryan Общие вопросы Javascript 1 29.06.2017 10:38
После fetch на выходе Array, а не Collection _sky_ Backbone.js 2 06.02.2015 18:22
Выплывающее поле Макс3000 Элементы интерфейса 24 04.04.2012 19:29
Не проходит запрос в базу если в поле кириллица Sadist_dead Серверные языки и технологии 1 26.11.2011 17:12