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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2015, 12:38   #1
eclipse_99
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 10
По умолчанию Embarcadero и UTF8Encode

Здравствуйте! В Delphi XE столкнулся с такой проблемой, что многие функции перекодирования работают не так как в старом добром Delphi 7. Конкретно интересует функция UTF8Encode. Если раньше всё нормально работало так ShowMessage(UTF8Encode('Привет')) и равнялось Привет , то сейчас этого не происходит... как было 'Привет', так и остаётся. Кто поможет разобраться?
eclipse_99 вне форума Ответить с цитированием
Старый 07.06.2015, 13:10   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Привет и раньше было, только твой любимый D7 (и мой тоже) его не понимал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.06.2015, 13:57   #3
eclipse_99
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Привет и раньше было, только твой любимый D7 (и мой тоже) его не понимал
И как быть? У меня есть страничка в которой присутствует русскоязычный текст. Мне его нужно перевести в кракозябры UTF8, чтобы потом эту страничку WebBrowser отображал понятным для всех виде.
eclipse_99 вне форума Ответить с цитированием
Старый 07.06.2015, 14:38   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
У меня есть страничка в которой присутствует русскоязычный текст. Мне его нужно перевести в кракозябры UTF8, чтобы потом эту страничку WebBrowser отображал понятным для всех виде.
дай посмотреть.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.06.2015, 14:51   #5
eclipse_99
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
дай посмотреть.
А что смотреть то? Например: есть любой текст на русском языке, его хотелось бы видеть в UTF8Encode виде. Как самый простой вариант, как было в D7, это ShowMessage(UTF8Encode('Привет')); Но текст в сообщении так и выглядит "Привет".

Вот наглядные примеры:
Мой комбайн на D7



А это на DXE8

eclipse_99 вне форума Ответить с цитированием
Старый 07.06.2015, 15:08   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
есть любой текст на русском языке
в какой кодировке текст?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.06.2015, 15:11   #7
eclipse_99
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
в какой кодировке текст?
Набранный вручную, я так понимаю, будет в Windows 1251? Так?
eclipse_99 вне форума Ответить с цитированием
Старый 07.06.2015, 15:19   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Так?
ты ошибаешься.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.06.2015, 16:12   #9
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от eclipse_99 Посмотреть сообщение
Если раньше всё нормально работало так ShowMessage(UTF8Encode('Привет')) и равнялось Привет , то сейчас этого не происходит... как было 'Привет', так и остаётся. Кто поможет разобраться?
Теперь в Delphi каждая строка хранист свою кодировку, а VCL ее учитывает, поэтому всё просто работает. Нужно выкинуть все костыли Delphi 7 и наслаждаться жизнью.

Если же по каким-то причинам хочется узнать фактическую кодировку строки, нужно вызвать StringCodePage(MyString).
Vapaamies вне форума Ответить с цитированием
Старый 08.06.2015, 14:11   #10
eclipse_99
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 10
По умолчанию

StringCodePage показывает что у меня код текста 1200, т.е. Unicode. Затем попытался перевести в utf8

Код:
procedure TForm1.btn1Click(Sender: TObject);
type
  // The code page for ANSI-Cyrillic is 1251
  CyrillicString = type AnsiString(1251);
var
  U8: UTF8String;
  C: CyrillicString;
begin
  U8 := edt1.Text;
  ShowMessage(U8 + #13 + IntToStr(StringCodePage(U8))); // показывает 65001
  C := U8;
  ShowMessage(C + #13 + IntToStr(StringCodePage(C))); // показывает 1251
  c:= UTF8Encode(c);
  ShowMessage(C + #13 + IntToStr(StringCodePage(C))); // показывает 65001 так же Привет
end;
Не пойму в чём подвох!?

Последний раз редактировалось eclipse_99; 08.06.2015 в 14:57.
eclipse_99 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Embarcadero C++ и InterBase shredinger C/C++ Базы данных 2 02.06.2013 21:29
Embarcadero C++, C OpenCL DARTS C++ Builder 1 07.02.2013 22:18
линии в Embarcadero shanluu Софт 3 01.01.2011 20:43
Акция 2 за 1 от Embarcadero Квэнди Свободное общение 6 30.07.2009 11:16