Здравствуйте!
Я только начинаю пользоваться Hiasm'ом. Но у меня также возникла проблема с кодировками. В частности необходимо редактировать текстовые файлы с кириллическим текстом в кодировке UTF-8 и соответственно сохранять в этом формате. Можно конечно это делать и сторонними программами, например AkelPad, Notepad++ и др., но очень интересно сделать свою программу, заодно и поучиться работать в Hiasm'е.
Я взяла пример из состава Hiasm под названием "Notepad", добавила в неё компонент Charset (UTF8_ANSI), который работает при открытии файла, и аналогично, при сохранении файла, только в обратную сторону ((ANSI_UTF8). Проверила - все отлично работает. Но это на русской ОС Windows SP3 (лицензия, стоит на ноутбуке). А вот на другом компьютере, там у меня стоит немецкая ОС Windows 7 (лицензия), вместо русских букв одни знаки вопросов. Затем, если создать новый документ, написать текст по русски и сохранить, то при открытии этого файла, например, тем же AkelPad, документ будет в формате UTF-8, но вместо русских букв отображаются иероглифы.
Сразу скажу, что текстовые файлы с русским текстом в формате UTF-8 на немецкой ОС текстовыми редакторами AkelPad, Notepad++ открываются правильно, русский текст отображается, а вот моей программе знаки вопросов.
В связи с этим у меня возникают вопросы:
1) Почему они верно открывают файлы, а моя программа не правильно?
2) Можно ли реализовать подобный механизм в программе, созданной с помощью Hiasm?
Я начала искать ответ на вашем форуме. Нашла много разных примеров, но конкретной реализации нет (если они есть, то ткните носом, я не обидчивая). В основном все вопросы были связаны с правильным отображением букв русского алфавита на русских (пиратских) ОС Windows, с правкой реестра, подменой локали и т.д. А как быть на системах с другим системным языком? Причем, я против каких либо кардинальных правок в системе. Как я поняла, вместо русской кодовой страницы 1251 берется 1252 и из-за этого получается ошибка на этапе преобразования из UTF-8 в ANSI (и наоборот, при сохранении). Но почему такая ошибка не происходит при открытии файла в том же AkelPad или Notepad++? Кто-то здесь давал совет, что необходимо задать жесткую привязку по кодовым страницам. Решила попробовать. Указала для преобразования UTF8 - 65001, а для ANSI - 1251. Скомпилировала проект, перенесла программку на немецкую ОС и запустила. Открыла документ и... вместо русских букв уже не знаки вопросов, а какие-то кракозяблики. Прогресс на лицо. На Википедии (здесь у вас тоже ссылку давали) установила, что мои иероглифы соответствуют отображению кодовой страницы 1251 символами страницы 1252. Делаю вывод, преобразование UTF8_ANSI моя программа сделала правильно, но для отображения текста была взята кодовая страница 1252 используемая в системе по умолчанию.
В своем проекте, в компоненте Memo, в свойствах шрифта указала "Кириллический" набор символов. Снова скомпилировала программку и запустила на немецкой оси. О чудо, теперь русский шрифт отображается верно. Делаю небольшие заметки на русском и сохраняю документ. Для проверки правильности формата открываю его AkelPad'ом. Все верно, русские буквы на месте и формат UTF-8. Моя первая маленькая победа. Но...
Если мое творение, запустит у себя на компьютере, например, француз или испанец, с соответствующей их языку локалью ОС Windows, то открыв свой документ, они увидят иероглифы или знаки вопросов. Потому что, в программе жестко указаны кодовые страницы и набор символов. Как быть?
Подскажите, пожалуйста, как можно избежать указания конкретной кодовой страницы, а использовать просто метод UTF8_ANSI (ANSI_UTF8)?
Ведь программы AkelPad или Notepad++ это как-то делают. Пока вам писала, вдруг осенило, что набор символов шрифта в моей программке можно изменять с помощью компонента "Font", сделав соответствующую кнопочку в меню. Тогда пользователь сам сможет выбрать и настроить шрифт .
А вот как быть с правильным определением кодовой страницы?
Вот ваша программка немного мной переделанная.
code_22216.txt
С уважением, Horna.
Ответов: 3
Рейтинг: 4
|
|||
карма: 0 |
| ||
файлы: 1 | code_22216.txt [6.1KB] [188] | ||
Голосовали: | Netspirit, foksov, Ivann, petrocan |