|
Основной форум Сюда все проблемы связанные с программированием. |
20.09.2010, 09:28
|
#1
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
utf-8 -> win-1251
Требуется передать на сайт строку с русским текстом в кодировке win-1251.
Нужно перевести utf-8 -> win-1251 - как это реализовать?
(использую POST)
program sendtosite; uses Lib_proweb; //... q_request('http://сайт.ру/', POST, 'string=русский-текст', 'none'); //...
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
20.09.2010, 10:30
|
#2
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: utf-8 -> win-1251
все реквесты передаются только в кодировке base64, кодируй в неё и передавай.
__________________
|
(Offline)
|
|
20.09.2010, 10:35
|
#3
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: utf-8 -> win-1251
Сообщение от SBJoker
все реквесты передаются только в кодировке base64...
|
ясно, не знал
Сообщение от SBJoker
...кодируй в неё и передавай.
|
кто знает как это сделать?
Upd: в proweb нашел .. буду разбираться
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
20.09.2010, 14:57
|
#4
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: utf-8 -> win-1251
все реквесты передаются только в кодировке base64
|
Base64 тут не юзают, вроде (хотя наверно можно, если указать правильный Контент Тип). Я в PHP когда нужно отправить запрос к стороннему серверу, всегда юзаю urlencode() и проблем никогда не было. Вот описание из мануала:
urlencode - URL-кодирует строку.
string urlencode (string str)
Возвращает строку, в которой все не алфавитно-числовые символы (кроме -_.) заменены на знак процентов (%) с последующими двумя 16-ричными цифрами и пробелами, кодированными как знаки плюс (+). Она кодируется тем же способом, что и post данные WWW-формы, то есть как в типе носителя application/x-www-form-urlencoded.
|
И этот метод попроще, чем base64, даже битовые сдвиги юзать не надо.
|
(Offline)
|
|
20.09.2010, 22:08
|
#5
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: utf-8 -> win-1251
Сообщение от Phantom
..(хотя наверно можно, если указать правильный Контент Тип)..
|
у меня стоит:
q_property('Content-Type', 'application/x-www-form-urlencoded');
Раньше показывало как "???????-?????", я попробовал так:
q_request('http://сайт.ру/', POST, base64_encode('string=русский-текст'), 'none');
- переводит в белиберду типа "8PPx8ero6S3y5erx8g=="
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
20.09.2010, 22:39
|
#6
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: utf-8 -> win-1251
Сообщение от 2Fake
у меня стоит:
q_property('Content-Type', 'application/x-www-form-urlencoded');
Раньше показывало как "???????-?????", я попробовал так:
q_request('http://сайт.ру/', POST, base64_encode('string=русский-текст'), 'none');
- переводит в белиберду типа "8PPx8ero6S3y5erx8g=="
|
Белиберда это как раз Base64
|
(Offline)
|
|
20.09.2010, 22:42
|
#7
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: utf-8 -> win-1251
Я же тебе написал как делать. Преобразуй все символы, не входящие в диапазон [a-zA-Z0-9._-] в % + шестнадцатиричный код символа. Например, было "слово", а стало "%D1%81%D0%BB%D0%BE%D0%B2%D0%BE" (тут в примере для кодировки UTF-8 ). Ты смотри кодировку страницы, где у тебя оригинальная форма находится. Форма отправляет текст в той кодировке, в какой страница написана.
|
(Offline)
|
|
20.09.2010, 22:54
|
#8
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: utf-8 -> win-1251
а base64 всёрно круче и экономичнее...
__________________
|
(Offline)
|
|
21.09.2010, 01:05
|
#9
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: utf-8 -> win-1251
Форма находится на стороннем сервере [кодировка UTF-8]..
Отправляю так:
program sendtosite; uses proweb; var fld, ind: integer; btn, clicked: command; begin ClearForm; ShowForm; SetFormTitle('Отправка'); fld:=formAddTextField('Текст:', '', 100, TF_ANY); btn:=CreateCommand('OK', CM_SCREEN, 1); AddCommand(btn); repeat clicked := GetClickedCommand; until clicked <> EmptyCommand; q_property('Accept', '*/*'); q_property('Content-Type', 'application/x-www-form-urlencoded'); q_property('User-Agent', 'myprog'); ind:=q_request('http://сайт.ру/index.php', POST, 'string='+FormGetText(fld), 'none'); end.
Возращает строку "Булка.", как "?????."
Что не так?
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
21.09.2010, 01:12
|
#10
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: utf-8 -> win-1251
На сколько я понимаю, если в ContentType указано application/x-www-form-urlencoded, то строку нужно предварительно перекодить так, как говорил Phantom.
|
(Offline)
|
|
21.09.2010, 01:25
|
#11
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: utf-8 -> win-1251
Тестировал на localhost'е. Попробовал убрать строчку
q_property('Content-Type', 'application/x-www-form-urlencoded');
- POST не принимает ничего..
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
21.09.2010, 01:28
|
#12
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: utf-8 -> win-1251
Естественно, параметр ContentType должен быть задан. Попробуй передать закодированную строку (с q_property('Content-Type', 'application/x-www-form-urlencoded'); ).
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.09.2010, 02:25
|
#13
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: utf-8 -> win-1251
Сходил на перекур, попробовал сделать так:
program sendtosite; uses proweb; var fld, ind, n, i: integer; btn, clicked: command; baza, alf, message_m, cha, ready_m: string; rus_alf, rus_mess: array[0..400] of string; contin: boolean; procedure Initial; //инициализация (нужна для функции encod) begin baza := '%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4%D0%B5%D1%91%D0%B6%D0%B7%D0%B8%D0%B9%D0%BA%D0%BB%D0%BC%D0%BD%D0%BE%D0%BF%D1%80%D1%81%D1%82%D1%83%D1%84%D1%85%D1%86%D1%87%D1%88%D1%89%D1%8A%D1%8B%D1%8C%D1%8D%D1%8E%D1%8F%D0%90%D0%91%D0%92%D0%93%D0%94%D0%95%D0%81%D0%96%D0%97%D0%98%D0%99%D0%9A%D0%9B%D0%9C%D0%9D%D0%9E%D0%9F%D0%A0%D0%A1%D0%A2%D0%A3%D0%A4%D0%A5%D0%A6%D0%A7%D0%A8%D0%A9%D0%AA%D0%AB%D0%AC%D0%AD%D0%AE%D0%AF'; alf := 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; n:=0; for i := 0 to 65 do begin rus_alf[i] := getchar(alf, i); rus_mess[i] := copy(baza, n, n+6); n:= n+6; end; end; function encod(mess: string): string; //этим мы перекодируем строку begin message_m:=''; for i := 0 to length(mess)-1 do begin contin:=false; for n:=0 to 65 do begin cha:=getchar(mess,i); if contin=false then begin if cha = rus_alf[n] then begin message_m := message_m + rus_mess[n] ; contin:=true; end; else contin:=false; end; end; if contin=false then message_m:=message_m+cha; end; encod:=message_m; end; begin //код программы Initial; ClearForm; ShowForm; SetFormTitle('Отправка'); fld:=formAddTextField('Текст:', '', 100, TF_ANY); btn:=CreateCommand('OK', CM_SCREEN, 1); AddCommand(btn); repeat clicked := GetClickedCommand; until clicked <> EmptyCommand; ready_m:=encod(FormGetText(fld)); //перекодировали то, что ввели с формы q_property('Accept', '*/*'); q_property('Content-Type', 'application/x-www-form-urlencoded'); q_property('User-Agent', 'myprog'); ind:=q_request('http://localhost/index.php', POST, 'go='+ready_m, 'none'); //и отправили end.
на localhost'е такой код:
<?php //это содержание файла index.php (UTF-8) //(в ".htaccess" стоит "AddDefaultCharset utf-8") $getp=$_POST['go']; $gets=@file_get_contents('br.dat'); $gets=$getp."\n".$gets; $sava=fopen('test.dat', 'w'); fputs($sava, $gets); fclose($sava); ?>
Результаты:
localhost - принял, создался файл "test.dat" (ANSI-кирилица) с введенной строкой..
сторонний сайт - отказался!!
Upd: не знаю что и делать
__________________
Уважай собеседника, а лучше подари ему +
Последний раз редактировалось Trazzy, 22.09.2010 в 04:48.
|
(Offline)
|
|
22.09.2010, 04:50
|
#14
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: utf-8 -> win-1251
Ну что ни у кого больше нет идей?.. Что может еще быть?
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
22.09.2010, 10:49
|
#15
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: utf-8 -> win-1251
Я уже всё написал, как это делается.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:31.
|