Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 20.09.2010, 09:28   #1
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 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
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: utf-8 -> win-1251

все реквесты передаются только в кодировке base64, кодируй в неё и передавай.
__________________
(Offline)
 
Ответить с цитированием
Старый 20.09.2010, 10:35   #3
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: utf-8 -> win-1251

Сообщение от SBJoker Посмотреть сообщение
все реквесты передаются только в кодировке base64...
ясно, не знал

Сообщение от SBJoker Посмотреть сообщение
...кодируй в неё и передавай.
кто знает как это сделать?
Upd: в proweb нашел .. буду разбираться
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 20.09.2010, 14:57   #4
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 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
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: utf-8 -> win-1251

Сообщение от Phantom Посмотреть сообщение
..(хотя наверно можно, если указать правильный Контент Тип)..
у меня стоит:
q_property('Content-Type''application/x-www-form-urlencoded'); 
Раньше показывало как "???????-?????", я попробовал так:
q_request('http://сайт.ру/'POSTbase64_encode('string=русский-текст'), 'none'); 
- переводит в белиберду типа "8PPx8ero6S3y5erx8g=="
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 20.09.2010, 22:39   #6
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: utf-8 -> win-1251

Сообщение от 2Fake Посмотреть сообщение
у меня стоит:
q_property('Content-Type''application/x-www-form-urlencoded'); 
Раньше показывало как "???????-?????", я попробовал так:
q_request('http://сайт.ру/'POSTbase64_encode('string=русский-текст'), 'none'); 
- переводит в белиберду типа "8PPx8ero6S3y5erx8g=="

Белиберда это как раз Base64
(Offline)
 
Ответить с цитированием
Старый 20.09.2010, 22:42   #7
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 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
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: utf-8 -> win-1251

а base64 всёрно круче и экономичнее...
__________________
(Offline)
 
Ответить с цитированием
Старый 21.09.2010, 01:05   #9
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: utf-8 -> win-1251

Форма находится на стороннем сервере [кодировка UTF-8]..
Отправляю так:
program sendtosite;
uses proweb;
var
  
fldindinteger;
  
btnclickedcommand;

begin
  ClearForm
;
  
ShowForm;
  
SetFormTitle('Отправка');
  
fld:=formAddTextField('Текст:'''100TF_ANY);
  
btn:=CreateCommand('OK'CM_SCREEN1);
  
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
ViNT
Модератор
 
Регистрация: 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
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 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
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: utf-8 -> win-1251

Естественно, параметр ContentType должен быть задан. Попробуй передать закодированную строку (с q_property('Content-Type', 'application/x-www-form-urlencoded'); ).
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Trazzy (22.09.2010)
Старый 21.09.2010, 02:25   #13
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: utf-8 -> win-1251

Сходил на перекур, попробовал сделать так:

program sendtosite
uses proweb
var 
  
fldindniinteger
  
btnclickedcommand
  
bazaalfmessage_mchaready_mstring;
  
rus_alfrus_mess: array[0..400of string;
  
continboolean;

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 
:= 0 to 65 do
  
begin
    rus_alf
[i] := getchar(alfi);
    
rus_mess[i] := copy(bazann+6);
    
n:= n+6;
  
end;
end;

function 
encod(messstring): string//этим мы перекодируем строку
begin
message_m
:='';
for 
:= 0 to length(mess)-do
    
begin
    contin
:=false;
      for 
n:=0 to 65 do
      
begin
      cha
:=getchar(mess,i);
      if 
contin=false then
        begin
        
if cha rus_alf[nthen 
            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('Текст:'''100TF_ANY); 
  
btn:=CreateCommand('OK'CM_SCREEN1); 
  
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
Trazzy
Разработчик
 
Аватар для Trazzy
 
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений
(для 225 пользователей)
Ответ: utf-8 -> win-1251

Ну что ни у кого больше нет идей?.. Что может еще быть?
__________________
Уважай собеседника, а лучше подари ему +
(Offline)
 
Ответить с цитированием
Старый 22.09.2010, 10:49   #15
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: utf-8 -> win-1251

Я уже всё написал, как это делается.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Trazzy (22.09.2010)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 17:31.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com