 |
Основной форум Сюда все проблемы связанные с программированием. |
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:11.
|