|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
30.08.2011, 01:33 | #1 |
Форумчанин
Регистрация: 15.06.2007
Сообщений: 182
|
Delphi 7 и снова о UTF-8
Загружается txt файл (UTF-8):
Код:
Я знаю что Delphi начал поддерживать UTF-8 начиная только с 2009 версии. Но быть может мою задачу можно решить и на Delphi 7? Тоесть в txt файле немецкие предложения, в них есть эти буквы с двойными точками наверху, возможно ли их как-то вывести в Edit2? |
30.08.2011, 06:03 | #2 |
Старожил
Регистрация: 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, но могут быть проблемы с неевропейскими кодировками.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
30.08.2011, 09:00 | #3 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
рекомендую ознакомится со статьёй уважаемого GunSmoker'а Работа с текстовыми файлами в любой кодировке из Delphi до 2009 _________________________ Но в целом я согласен с veniside. впрочем, полученные unicode данные всё равно в простой не-unicode TEdit просто так отобразить не удастся! (если не воспользоваться способом преобразования в ANSI описанном выше veniside) p.s. если есть возможность - рассмотрите переход на более свежую версию Delphi Последний раз редактировалось Serge_Bliznykov; 30.08.2011 в 09:03. |
|
30.08.2011, 13:22 | #4 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> никогда не говори "никогда"
точно ) Ещё вариант — найти юникодные визуальные компоненты для Delphi младше 2009. Ну или наваять их самому, там не так уж и много работы, если не озадачиваться поддержкой юникода на 95/98/Me винде )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
30.08.2011, 15:05 | #5 |
Форумчанин
Регистрация: 26.07.2009
Сообщений: 489
|
Перепиши класс с использованием Unicod-a и все)
а лучше пересядь на более новую Среду разработки
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Преобразовние 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 |