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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2011, 01:33   #1
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию Delphi 7 и снова о UTF-8

Загружается txt файл (UTF-8):
Код:
var  qBuff: TStringList;
begin
  qBuff:=TStringList.create; 
  qBuff.loadFromFile(edit1.Text);
Далее его содержимое показывается в Edit2.Text.

Я знаю что Delphi начал поддерживать UTF-8 начиная только с 2009 версии. Но быть может мою задачу можно решить и на Delphi 7?

Тоесть в txt файле немецкие предложения, в них есть эти буквы с двойными точками наверху, возможно ли их как-то вывести в Edit2?
celovec вне форума Ответить с цитированием
Старый 30.08.2011, 06:03   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

1) TStringList не будет правильно загружать UTF-8 никогда. UTF-8, фактически, нужно рассматривать как бинарный формат, т.е. читать его как набор байт, а не строк.

2) Прочитав UTF-8 байты, их нужно перевести в юникод с помощью MultiByteToWideChar(CP_UTF8, ....). Поддерживается это, кстати, начиная с четвёртой (или 3-ей?) версии Дельфи.

3) Получив нормальный юникод, переводим его в ANSI строку (т.к. стандарные VCL контролы могут отображать юникод напрямую только начиная с 2009 версии Дельфи) с помощью WideCharToMultiByte();
При переводе важно правильно указать кодовую страницу, для большинства европейских языков пойдёт 1252.

4) полученную ANSI строку записываем в Edit. Не забываем в Font.CharSet выставить правильное значение. Опять же, для европы пойдёт BALTIC_CHARSET.


Фактически, шаг №3 можно пропустить, т.к. юникод автоматически преобразуется в ASNI строку при присвоении Edit.Text, но могут быть проблемы с неевропейскими кодировками.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 30.08.2011, 09:00   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
TStringList не будет правильно загружать UTF-8 никогда.
никогда не говори "никогда"....

рекомендую ознакомится со статьёй уважаемого GunSmoker

Работа с текстовыми файлами в любой кодировке из Delphi до 2009
_________________________

Но в целом я согласен с veniside.

впрочем, полученные unicode данные всё равно в простой не-unicode TEdit просто так отобразить не удастся!
(если не воспользоваться способом преобразования в ANSI описанном выше veniside)


p.s. если есть возможность - рассмотрите переход на более свежую версию Delphi

Последний раз редактировалось Serge_Bliznykov; 30.08.2011 в 09:03.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.08.2011, 13:22   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> никогда не говори "никогда"

точно )

Ещё вариант — найти юникодные визуальные компоненты для Delphi младше 2009. Ну или наваять их самому, там не так уж и много работы, если не озадачиваться поддержкой юникода на 95/98/Me винде )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 30.08.2011, 15:05   #5
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Перепиши класс с использованием Unicod-a и все)
а лучше пересядь на более новую Среду разработки
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразовние Utf-16 <=> Utf-8 hard-t Общие вопросы C/C++ 1 26.08.2011 13:54
Внедрение UTF-8 кодировки в Delphi 7 Shuga Помощь студентам 1 10.06.2011 16:31
И снова сертификаты, или ssl+delphi+https Lothar Работа с сетью в Delphi 4 04.05.2011 08:23
Ansi в UTF-8 и наоборот UTF-8 в Ansi Alar Работа с сетью в Delphi 3 09.12.2010 17:02
И снова левая и правая кнопка мыши (Delphi 7) alxd Помощь студентам 6 25.09.2009 14:10