Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2013, 18:04   #1
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию Юникод и IdHttp.

Проштудировал весь интернет но так и не смог найти решения. Среда разработки XE5. Необходимо отправить юникодную строку на сайт пост запросом. Использую StringStream чтоб инди не меняла кодировку. Но вот перевести в юникод нормальным методом ни как не получается. Единственный код который работает, выглядит так.

Код:
var
  utfarr: array [0..65] of string = ('Рђ','Р‘','Р’','Р“','Р”','Р•','РЃ','Р–','Р—','Р˜','Р™','Рљ','Р›','Рњ','Рќ','Рћ','Рџ','Р*','РЎ','Рў','РЈ','Р
¤','РҐ','Р¦','Р§','РЁ','Р©','РЄ','Р«','Р¬','Р*','Р®','РЇ','Р°','Р±','РІ','Рі','Рґ','Рµ','С‘','Р¶','Р·','Рё','Р№','Рє','Р»','Рј','РЅ','Рѕ','Рї','СЂ','СЃ','С‚','Сѓ','С„','С…','С†','С‡','С
€','С‰','СЉ','С‹','СЊ','СЌ','СЋ','СЏ');
  Ansiarr: array [0..65] of string =
('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я','а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','
р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я');
UtfList,AnsiList:TStringList;
implementation

function AnsiToUtf(S:string):string;
var i, n: integer;
res: String;
begin
for i := 1 to Length(s) do begin
n := AnsiList.IndexOf(s[i]);
if n > -1 then res := res + UtfList[n] else res := res + s[i];
end;
result := res;
end;

initialization
UtfList := TStringList.Create;
AnsiList := TStringList.Create;
AnsiList.CaseSensitive := true;//чувствительность к регистру
for i := 0 to 65 do begin
UtfList.Add(UtfArr[i]);
AnsiList.Add(AnsiArr[i]);
end;
То есть я в обычный string вставляю юникод, и тогда он нормально отправляется. Как можно сделать тоже самое только более правильно? Просьба по ссылка не отправлять, я уже достаточно их по-изучал.

Последний раз редактировалось doktor255; 28.12.2013 в 18:15.
doktor255 вне форума Ответить с цитированием
Старый 28.12.2013, 18:14   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

string это и есть юникод, зачем еще конвертировать?
eval вне форума Ответить с цитированием
Старый 28.12.2013, 18:16   #3
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Не знаешь ответ, не пиши. Если бы не было проблем в перекодировании, наверное я бы не писал кучу не нужного кода. Логично??? Я показал принцип перекодирования, который работает. Нужно сделать то же самое, только грамотно.
doktor255 вне форума Ответить с цитированием
Старый 28.12.2013, 18:21   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Читайте про класс TEncoding и его возможности.
Ах да, с 2009 версии все строки по умолчанию юникодные.
Вопрос в другом: уведомляете ли вы сервер от том, что передаете данные не в ожидаемой им кодировке? Это очень важный момент)

P.S. Ваши методы кодирования реализованы не правильно. UF8Decode, UTF8Encode уже не в радость?

Цитата:
Не знаешь ответ, не пиши. Если бы не было проблем в перекодировании
Оно вам нафиг не нужно это перекодирование. Компилятор сам это делает за вас и в вашей помощи нуждается только тогда, когда вам нужно передать какой-нибудь KOIR-8 вместо Unicode.

Последний раз редактировалось Человек_Борща; 28.12.2013 в 18:26.
Человек_Борща вне форума Ответить с цитированием
Старый 28.12.2013, 18:25   #5
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Извиняюсь за грубость, но по другому видимо не как. Для тех кто в танке. Я перепробовал всё что можно, и перечитал всё что можно. В том числе и TEncoding . Работает только тот код что я привёл выше, но даже я понимаю, что это не правильно. Решение есть???

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Вопрос в другом: уведомляете ли вы сервер от том, что передаете данные не в ожидаемой им кодировке?
Необходимый мне сервер отвергает любые другие кодировки.

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
P.S. Ваши методы кодирования реализованы не правильно. UF8Decode, UTF8Encode уже не в радость?
UTF8Encode был бы в радость если бы работал. на сервер всё равно шлётся Ansi.

Последний раз редактировалось doktor255; 28.12.2013 в 19:03.
doktor255 вне форума Ответить с цитированием
Старый 28.12.2013, 18:43   #6
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Если постановка вопроса не понятна, спрошу по другому. Привожу просто проект с двумя кнопками. При клике на первую кнопку появляются иероглифы. При клике на вторую кнопку нормальный текст. Вторую кнопку необходимо привести к первой, чтоб в ShowMessage были такие же иероглифы. Как это сделать? Просьба ответить сразу кодом.
Вложения
Тип файла: rar Новая папка.rar (56.4 Кб, 9 просмотров)

Последний раз редактировалось doktor255; 28.12.2013 в 18:55.
doktor255 вне форума Ответить с цитированием
Старый 28.12.2013, 19:14   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну и как же ты отправляешь POST запрос?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.12.2013, 19:20   #8
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

А какое это имеет значение? Я привёл пример проекта, где вообще нет инди, и обозначил задачу. Может так добьюсь ответа на свой вопрос.
doktor255 вне форума Ответить с цитированием
Старый 28.12.2013, 19:25   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А какое это имеет значение?
Огромнейшее. В заголовках запроса можно указывать кодировку.
Примеры:
http://www.programmersforum.ru/showthread.php?t=86796
http://www.programmersforum.ru/showthread.php?t=173986
http://programmersforum.ru/showthread.php?t=54340
И так далее. Рекомендую к изучению.

P.S. Я в этой теме отвечать больше не буду.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.12.2013, 19:32   #10
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Да лучше бы вообще не отвечал. Пишу что в моём случае сервер работает ИСКЛЮЧИТЕЛЬНО с юникодом (один символ кодируется двумя байтами), и ему глубоко до одного места что я указываю в шапке запроса, но мои слова почему-то игнорируются. Толк от таких ответов??? Ну пробовал я редактировать заголовок формы, ну получил в итоге ошибку со стороны сервера. Дальше то что???
doktor255 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Юникод Mrbober Общие вопросы Delphi 1 11.03.2012 15:02
юникод artush1984 Общие вопросы C/C++ 0 09.03.2010 17:42
Юникод и Delphi 7 Лубышев Общие вопросы Delphi 12 02.08.2009 00:11
Юникод и ANSI Ivin Общие вопросы Delphi 1 17.02.2009 15:45
юникод в ANSI techner Общие вопросы Delphi 6 12.12.2007 20:40