|
Кодировка в HTTP запросах | ☑ | ||
---|---|---|---|---|
0
Peltik
21.02.21
✎
16:36
|
Написал для пробы в 8.3 небольшой HTTP-сервис, в ответ кодировку выставляю вот так
Ответ.УстановитьТелоИзСтроки(Результат,КодировкаТекста.ANSI); пытаюсь из 7.7 получить, всё ОК, кроме русских букв, вместо них ????? WinHTTP = СоздатьОбъект("MSXML2.XMLHTTP.6.0"); WinHTTP.Open("GET", "http://localhost/Production/hs/PL/PL/Period?dn=20200122&dk=20201231"); WinHTTP.send(); ТекстОтвета = СоздатьОбъект("Текст"); ТекстОтвета.КодоваяСтраница(0); ТекстОтвета = WinHTTP.responseText; Кодировки текста пытался менять и в 8.3 и 7.7, не помогает :( Где копать? |
|||
1
vde69
21.02.21
✎
17:19
|
видимо вместо 0 надо поставить что-то правильное
|
|||
2
Peltik
21.02.21
✎
17:25
|
(1) КодоваяСтраница(<?>)
Синтаксис: КодоваяСтраница(<Режим>) Назначение: Установить режим кодировки текста. Возвращает: текущее числовое значение режима кодировки (на момент до исполнения метода). Параметры: <Режим> : 0 - windows-кодировка, 1 - DOS-кодировка. Например 2? |
|||
3
ДедМорроз
21.02.21
✎
19:49
|
Как бы,стандартом для http является кодировка utf8.
Кодировка же ansi,это системная кодировка без преобразования AnsiToOem и обратно. Соответственно,если код на сервере,а сервер нерусский,то в ней просто русских букв быть не может. Кроме того,utf8 от ansi в первой части кодовой страницы 1-127 не отличается ничем. |
|||
4
Peltik
21.02.21
✎
20:12
|
(3) не совсем понятно, какой вывод я отсюда должен сделать? :(
|
|||
5
ДенисЧ
21.02.21
✎
20:15
|
(4) Вывод простой - работай в нормальной кодировке.
Ты же KOI-7U не используешь? |
|||
6
Peltik
21.02.21
✎
20:24
|
(5) а где в коде я использую ненормальную кодировку?
Единственное предположение из (3), что во всё виноват Apache, хотя если запрос выполнить из браузера, ту русские символы отображаются нормально |
|||
7
ДенисЧ
21.02.21
✎
20:32
|
(6) "Результат,КодировкаТекста.ANSI"
Заметьте, не я это написал... |
|||
8
Peltik
21.02.21
✎
20:40
|
(7) ни с OEM ни UTF8 ни с UTF16 не работает
Кодировки текста пытался менять и в 8.3 и 7.7, не помогает :( Заметьте, это я написал, прям в первом посте |
|||
9
ДедМорроз
21.02.21
✎
21:34
|
Ну и,самое главное,что Com-объект передает текст в кодировке unicode,и какую бы вы для текста не ставили,все в unicode останется.
Сервер должен в ответе указать правильную кодировку,которую объект httprequest уже вам преобразует в текст,а менять что-то в 1с после получения текста в неправильной кодировке - это как после драки кулаками не машут. |
|||
10
Вафель
21.02.21
✎
21:35
|
в 8 утф, а 77 не умеет в утф
|
|||
11
Вафель
21.02.21
✎
21:37
|
хлтя можно попробовать в 8 в заголовке другую кодировку поставить
|
|||
12
Eeeehhhh
22.02.21
✎
08:53
|
Через ADODB.Stream читай
|
|||
13
Peltik
22.02.21
✎
09:58
|
(12) а можно чуть подробней?
|
|||
14
Eeeehhhh
22.02.21
✎
10:03
|
(13) в гугле забанили?
|
|||
15
Peltik
22.02.21
✎
10:14
|
(14) нет, не забанили
Стрим = СоздатьОбъект("Adodb.Stream"); Стрим.Type = 2; Стрим.Mode = 3; Стрим.charset = "utf-8"; WinHTTP = СоздатьОбъект("MSXML2.XMLHTTP.6.0"); WinHTTP.Open("GET", "http://localhost/Production/hs/PL/PL/Period?dn=20200122&dk=20201231"); WinHTTP.send(); Стрим.Open(); Стрим.WriteText(WinHTTP.responseText); Стрим.SaveToFile("d:\12345678.txt"); Стрим.Close(); но в таком виде, всё равно в выходном файле фигня в виде ???? получается :( |
|||
16
Peltik
22.02.21
✎
12:01
|
воткнул в начале текста <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> и всё заработало :/
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |