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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2013, 21:46   #21
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Код:
function ToUtf8_2(S: String): UTF8String;
begin
  with TStringStream.Create(S, TUTF8Encoding.Create) do
  begin
    ShowMessage(Encoding.EncodingName); // проверяем кодировку
    Result := ReadString(Size);
    Free;
  end;
end;
Я себе так делал, все верно. в idhttp (HTTPOptions) hoForceEncodeParams := true;
ZuBy вне форума Ответить с цитированием
Старый 28.12.2013, 21:53   #22
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Скорее всего Utf16
Не-а. UTF-8
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.12.2013, 21:55   #23
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
P.S. И с какого не юникод? Самый что ни на есть юникод. Скорее всего Utf16.
utf8, а не utf16.
последний, помоему, не принят для вэба в силу пустых байт и разного порядка байт.
а utf8 кодируется от 1 до 6 байт на символ.
но это так, для справки

хм, форсирование кодировки параметров...да уж, забыл как-то
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.12.2013, 22:05   #24
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
Я себе так делал, все верно.
Не катит. То что нужно, не получаю.
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
последний, помоему, не принят для вэба
В моём случае это не совсем вэб сервер, или точнее не то, что принято под ним понимать. Это сервер одного ява приложения. Да и это не важно в конце концов. В D7 я пользовался AnsiToUtf8 и код прекрасно работал. При переходе на XE2 и выше сервер перестал меня понимать, и как я не искал решение, пробуя различные стандартные функции, так и не смог его найти. И тут не виноват сервер. Я смотри сниф отправляемого пакета, если используется что ни будь типа AnsiToUtf8 или просто string, HEX код один, а нужен совершенно другой, наподобие того, который выдаёт написанная мною вначале темы функция. Я уже не знаю где копать, чтоб написать, или найти НОРМАЛЬНУЮ функцию.

Последний раз редактировалось doktor255; 28.12.2013 в 22:13.
doktor255 вне форума Ответить с цитированием
Старый 28.12.2013, 22:07   #25
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
Не катит. То что нужно, не получаю.
а что нужно-то?
строку проверил? utf-8?
ответ от сервера пришел не правильный?
ZuBy вне форума Ответить с цитированием
Старый 28.12.2013, 22:15   #26
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

ZuBy сделай так
ShowMessage(ToUtf8_2('юникод'));
Что видишь? А нужно, чтоб были видны "крокозябры" юникода! Писал же выше, неужели так сложно прочитать?
doktor255 вне форума Ответить с цитированием
Старый 28.12.2013, 22:23   #27
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Используйте при конвертации не String, а AnsiString - и всё заработает
ReportCube вне форума Ответить с цитированием
Старый 28.12.2013, 22:36   #28
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

ReportCube Идея хорошая, и смысл мне понятен, но к сожалению так тоже не выходит. Упрощаю задачу до безумной простоты. Есть следующий код

Код:
var
s: string;
begin
s:= 'Программфорум';
Нужно дописать код и вывести переменную s на экран методом ShowMessage так, чтоб получилось как на картинке. Как это сделать?
Изображения
Тип файла: png Безымянный.png (5.9 Кб, 36 просмотров)

Последний раз редактировалось doktor255; 28.12.2013 в 22:46.
doktor255 вне форума Ответить с цитированием
Старый 28.12.2013, 22:46   #29
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Легко. Значение сохранено в формате UTF-8
Открываем как ANSI в кодировке Windows-1251 и получаем желаемое: Программфорум
ReportCube вне форума Ответить с цитированием
Старый 28.12.2013, 22:49   #30
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Вот держи, по другому никак
Код:
function ToUtf8_3(S: String): AnsiString;
var
  tfn: string;
begin
  Result := '';
  tfn := TPath.GetTempFileName;// Uses IOUtils;
  with TStringList.Create do
  begin
    Add(S);
    SaveToFile(tfn, TUTF8Encoding.Create); 
    Free;
  end;

  with TStringList.Create do
  begin
    LoadFromFile(tfn, TEncoding.ANSI);
    Result := Text;
    Free;
  end;
end;
ZuBy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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