![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: 1 Всего: 0 |
Хочю узнать как правильно в дельфи делать aligned on DWORD boundaries и переводить string в UNICODE когда работаешь с файлами.
Изобрел сооственный код который все это делает, но просто интересно как другие подходят к этой проблемме? Изобретают или есть какие-то готовые функции или чтот в этом роде. Это сообщение отредактировал(а) Ak47black - 1.11.2006, 16:47 |
|||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
А можеш своим кодом поделится???
|
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: 1 Всего: 0 |
Выглядит примерно так
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Ручная перекодировка?
Оригинально Велосипеды снова в моде |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: 1 Всего: 0 |
|
|||
|
||||
| Quadr0 |
|
|||
|
Unregistered |
...
Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 13:15 |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Quadr0, по-моему, код Ak47black немного проще, да и занимает гораздо меньше места... Поэтому за его код не стоит судить, мол, велосипед. Я сам этим методом пользуюсь.
-------------------- Ll 2 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Блин. Винда зачем нам дана?
Вот код, который работает, корректно обходя глюки WideString Delphi7:
Этот код должен работать корректно. Правда я не проверял ;) Но должен. В отличии от дельфи, он пытается сконвертить в указанную нами кодировку, а не в кодировку системы. Т.к. это не всегда возможно, то я добавил ещё проверку на успешность. Если не получилось, то конвертить в локаль, установленную через SetThreadLocale (если конечно мы не забыли этого сделать, как я писал в теме про борьбу с ?????). Если мы не указывали, то конвертнётся в системную локаль, как у дельфи по дефолту. |
|||
|
||||
| Quadr0 |
|
|||
|
Unregistered |
...
Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 13:15 |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: 1 Всего: 0 |
Спасибо свем кто ответил.
Ситуация мне прояснилась. |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Quadr0, извини, не всмотрелся в код... Думал, что код просто перекодирует строку... А оказывается он файл меняет полностью...
-------------------- Ll 2 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Нужно будет посмотреть, в Turbo код также глючит, как и в D7 или нет...
Раскопал причину глюка с автоперекодировкой. Теперь думаю, можно ли это поправить гибко, а не "намертво прибить русский, но чтоб работало"... Guedda, перекодирока в дельфи пишется в одну строчку - простым приравниванием. Другое дело, что эта автоперекодировка глючит в нерусских виндах. Уже не одно копьё на этом сломано Добавлено @ 20:06 Я дал функцию, которая перекодирует корректно в любых (надеюсь) виндах. Теперь вот ковыряю в сторону, как дельфи научить делать также при автоконвертации. Добавлено @ 20:08 Да, кстати. В UniStr := WideString(AnsiStr); WideString - лишнее. Достаточно просто прировнять - без приведения.
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Абалдеть.
Глюк не только в дельфи, но и в винде... Есть над чем поработать... Добавлено @ 20:24 Интересно, если любимая нами локаль 1049 вовсе не русская, то тогда чья? Если верить MSDN'у, то русская. Но тогда почему с русской локалью ассоциирована кодировка Latin1? Добавлено @ 20:24 Зато локаль 1024 русская |
|||
|
||||
| Quadr0 |
|
|||
|
Unregistered |
...
Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 13:15 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Да, глюки отсюда.
А под дефолтовой кодировкой понимается кодировка, ассоциированная с локалью треда. Отсюда и решение (в известном топике) с SetThreadLocale. Вот только заметил ещё одну бяку. Русская локаль 1049 (она же $409). Но с ней винда почему-то ассоциирует кодировку 1252 - Latin1. А вот это уже косяк. Вот если дельфе вдолбить SystemDefaultCodepage вместо тройки 1251, да добавить SetThreadLocale $409, то всё должно быть Ок. Но это требует корректировки system.pas, т.к. дефолтная локаль там приватна и не модифицируется извне system.pas |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |