Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нормальная работа Unicode и MFC, Как? 
:(
    Опции темы
Glorious
Дата 4.4.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.3.2005

Репутация: нет
Всего: нет



Добрый вечер!

Подскажите пожалуйста, как нормально работать с Unicode и MFC в VC++ 6.0 либо 2003? Студия юникодные ресурсы не может редактировать. Поэтому как, например, создать надпись на контролле в юникодном проекте. Английский - он и в африке английский! Однобайтовый английский переносится в Виндовый Юникод простым добавлением 0x00 перед каждым символом. А вот с русским так не получается, конечно... Поэтому хранимый в ресурсах однобайтовая русская строка в Виндовый Юникод перенесется таким же способом - что неправильно.

Знаю один способ - файл ресурсов перевести в Unicode и откомпилировать. Все будет нормально, русские символы с ресурсов на контроллах нормально отобразятся. Но редактировать-то Юникодный файл ресурсов нельзя! Получается, я должен опять подсунуть студии ANSI версию. Но дебаггить программу так неудобно - постоянно нужно гонять *.rc файл туда-сюда...

Профессионалы! Как вы пишите Unicodn-ые программы? Может, Вы знаете какие-нибудь ресурсы на эту тему?
Спасибо!

PM MAIL   Вверх
Coocky
Дата 4.4.2005, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Я не много не понял вопрос.Можно еще раз в одной строке-разрешение какой проблемы нужно?


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Гость_юзер
Дата 29.6.2005, 22:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В свойствах проекта нужно включить макрос _UNCODE и убрать макрос _MBCS и работать с проектом как обычно. Он скомпилиться как надо. Потому что в этом случае компилятор будет знать что Всякие макросы типа _TEXT и функции нужно компилить в UNICODE версии. И все
  Вверх
Earnest
Дата 30.6.2005, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(Glorious @ 4.4.2005, 19:30)
Знаю один способ - файл ресурсов перевести в Unicode и откомпилировать. Все будет нормально, русские символы с ресурсов на контроллах нормально отобразятся. Но редактировать-то Юникодный файл ресурсов нельзя!


В ресурсах строки всегда хранятся в UNICODE. Однако нужно правильно поставить язык ресурсов. Имеется в виду, конечно, не исходный rc-файл. И зачем его редактировать руками? Редактор ресурсов Studio вполне справляется...




--------------------
...
PM   Вверх
takedo
Дата 30.6.2005, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



Да в общем-то ничего делать и не надо. Только _T("...") где есть текст. Операции сравнения и работы со строками типа _tstrcpy - не помню точно, но если почитаь вторую главу Рихтера, то проблем нет. Да, еще вместо char использовать TCHAR и все! Хочешь Ansi - поставь в свойствах проекта однобайтовый, хочешь Unicode - широкобайтоваый.... У меня проблем с ресурсами не возникало, может я просто не профессионал...


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
CaptainFlint
Дата 1.7.2005, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: 7
Всего: 23



Glorious
Эх, у меня тоже такая же проблема. Вроде бы Unicode - стандарт для NT-ёвых ядер, а вот с созданием таких программ замучаешься... smile

Цитата(Earnest @ 30.6.2005, 07:28)
В ресурсах строки всегда хранятся в UNICODE. Однако нужно правильно поставить язык ресурсов. Имеется в виду, конечно, не исходный rc-файл. И зачем его редактировать руками? Редактор ресурсов Studio вполне справляется...

Сделай в редакторе ресурсов диалог, на котором одна кнопка с китайским текстом, вторая - с английским, третья - с русским. Кроме как создать три пустые кнопки, перевести ручками RC-файл в Unicode-формат, и уже в нём, опять-таки ручками прописать текст - другого способа я не вижу. А в результате такого способа шестая студия откажется вообще такой файл ресурсов открывать (а может даже и компилять, не помню уже), а седьмая откроет, но редактировать откажется.
То же самое касается файлов исходного кода. Кроме как в Unicode-формате, вряд ли удастся инициализировать строчки смесью разноязыковых символов, и никакие _T с _UNICODE'ом не помогут. Единственный способ - инициализировать массив явным перечислением шестнадцатеричных кодов. Т.е. вместо строки (не знаю, как где, в Опере её видно нормально):

TCHAR* str = "русский über alles, 癉뛺";

что было бы просто, удобно и понятно, приходится писать:

TCHAR* str = {0x0440, 0x0443, 0x0441, 0x0441, 0x043A, 0x0438, 0x0439, 0x0020, 0x00FC, 0x0062, 0x0065, 0x0072, 0x0020, 0x0061, 0x006C, 0x006C, 0x0065, 0x0073, 0x002C, 0x0020, 0x7649, 0xB6FA};

Ну и так далее. Короче, основная проблема в том, что Студии не умеют работать с юникодными файлами - отсюда и все проблемы.


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 4.7.2005, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



"Видно нормально", как мне кажется, зависит от того, что у вас в Windows установлено, а не от софта, в котором смотрите. Если нет у меня японского (или что у вас там), так и вижу я сплошные квадратики.

Проблема, как я понимаю, в том, что в одном ресурсе нужно смешать строки на разных языках? Да, неожиданная постановка вопроса.
А нельзя ли строки на разных языках разнести по разным таблицам строк, каждая для своего языка? Тогда, мне кажется, все должно быть видно и редактироваться нормально. Конечно, строки в диалог придется грузить руками, но раз уж такая хитрая задача стоит, можно выработать внутренние правила и написать код по замене строк один раз.


--------------------
...
PM   Вверх
CaptainFlint
Дата 4.7.2005, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: 7
Всего: 23



Цитата(Earnest @ 4.7.2005, 12:53)
"Видно нормально", как мне кажется, зависит от того, что у вас в Windows установлено, а не от софта, в котором смотрите. Если нет у меня японского (или что у вас там), так и вижу я сплошные квадратики.

А, да, не подумал. У меня просто шрифт Arial Unicode установлен. Видимо, он подхватывается. smile

Цитата(Earnest @ 4.7.2005, 12:53)
Проблема, как я понимаю, в том, что в одном ресурсе нужно смешать строки на разных языках? Да, неожиданная постановка вопроса.
А нельзя ли строки на разных языках разнести по разным таблицам строк, каждая для своего языка? Тогда, мне кажется, все должно быть видно и редактироваться нормально. Конечно, строки в диалог придется грузить руками, но раз уж такая хитрая задача стоит, можно выработать внутренние правила и написать код по замене строк один раз.

Да я понимаю, что всё это можно реализовать, я же не говорил, что проблема нерешаема. Я просто привёл примеры, когда отсутствие возможности работы с Unicode-файлами приводит к проблемам, к тому, что надо выполнять кучу дополнительных действий. Если бы была реализована нормальная работа с Unicode - то вопрос о решении подобных проблем не ставился бы. Да и самих проблем-то не существовало бы вообще! И это вызывает удивление, поскольку ядро NT-систем построено целиком и исключительно на Unicode, а MS, которая сама всё это реализовала, не предоставляет никаких нормальных инструментов для того, чтобы можно было использовать всю мощь Unicode.


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 4.7.2005, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Ну, что касается ресурсов, то формат-то (RES) довольно старый, и он предполагает единые языковые установки на ресурс. Если посмотреть функции API на тему ресурсов, то видно, что все основано как раз на концепции одного языка на ресурс: можно получить список ресурсов для данного языка, можно выбрать ресурс в зависимости от языка... и т.д. Ясно, что никто эту концепцию менять не будет.
Согласись, задача не очень распространенная - иметь внутри одного диалога поля на разном языке.

Вообще, не очень понятно, почему не получается в редакторе ресурсов написать строку на смеси языков. Если соответствующая поддержка языка установлена, и, скажем, в ворде вы можете писать на русско-китайской смеси, то в чем разница? Другое дело, студия может неправильно отображать поля (на тесте и при запуске), если язык не соответствует... Но может попробовать поставить Language Neutral?


--------------------
...
PM   Вверх
CaptainFlint
Дата 4.7.2005, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: 7
Всего: 23



Цитата(Earnest @ 4.7.2005, 18:48)
Ясно, что никто эту концепцию менять не будет.
Согласись, задача не очень распространенная - иметь внутри одного диалога поля на разном языке.

И всё-таки, можно было бы это реализовать как расширение. Кстати, насчёт концепций: если посмотреть на скомпилированный EXE-файл, то видно, что многие (если не все) ресурсы и так хранятся там в виде Unicode! Так что не слишком-то концептуальной получается эта языковая концепция... smile

Цитата(Earnest @ 4.7.2005, 18:48)
Вообще, не очень понятно, почему не получается в редакторе ресурсов написать строку на смеси языков. Если соответствующая поддержка языка установлена, и, скажем, в ворде вы можете писать на русско-китайской смеси, то в чем разница? Другое дело, студия может неправильно отображать поля (на тесте и при запуске), если язык не соответствует... Но может попробовать поставить Language Neutral?

Дело не в том, какой язык поставить, а в том, что невозможно в файле с кодировкой ANSI вписать текст сразу на нескольких разных языках, не влезающих в одну кодовую страницу. Ведь RC-файл должен иметь именно ANSI-формат. Ворд редактирует не текстовый файл, а многоформатный. Попробуй сделать в ворде смешанный многоязыковой текст и сохранить его как текстовый файл. Он тебя пошлёт куда подальше, сказав, что некоторые символы невозможно сохранить в данной кодировке.


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 4.7.2005, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Слушай, только сейчас увидела: в 7 студии, оказывается можно открыть rc-файл как UNICODE, редактировать его он вполне позволяет. Правая клавиша на rc-файле в Solution, Open With, и выбираешь из списка то, что нравится...
У меня сейчас никаких языков не установлено, поэтому проверить не могу. Может, попробуешь?


--------------------
...
PM   Вверх
CaptainFlint
Дата 4.7.2005, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: 7
Всего: 23



Цитата(Earnest @ 4.7.2005, 20:31)
Может, попробуешь?

Да, в виде текстового файла нормально редактирует, хотя и требует немножко поплясать с бубном: сделать сначала обычный Open, подредактировать, как надо, вызвать Save As, в появившемся диалоге у кнопочки Save ткнуться на стрелочку, величаво указующую вниз, выбрать в вывалившейся менюшке пункт Save with Encoding, там указать Unicode, и наконец-то в виде награды за ваше долготерпение файл будет сохранён в нужном формате. smile Только вот редактор ресурсов после этого будет абсолютно недееспособен... И главное, матерится-то как витиевато: говорит, что файл ресурсов, дескать, открыт внешним редактором, при том, что никаких внешних редакторов в этот момент в пределах компа не наблюдается.

И исходные файлы, как оказалось, всё-таки нормально понимаются, редактируются и компиляются, так что на этот счёт зря я поклёп возводил на студию - это в шестой версии юникод-файлы в упор не признаются, а в седьмой с этим получше дело обстоит. Так что, с учётом всего вышесказанного, список неудобств следующий:
1. Надо делать много лишних действий для перевода нужных файлов в Unicode-формат. Проще сделать это внешним редактором, чем самой Студией.
2. Полное непонимание юникода редактором ресурсов (не путать с редактированием файла ресурсов в текстовом виде! smile ).


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 5.7.2005, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Да... уж

Ну тогда прослеживаются 2 варинта действий:

1) Если таких ресурсов немного и изменять нужно нечасто, то выделяем это все в отдельный ресурс, проделываем все эти проктологические упражнения один раз и забываем, как страшный сон - до следующего раза.
2) В противоположной ситуации, когда много и/или часто, лучше поберечь нервные клетки и написать один раз код, который будет какие-нибудь специальные крюказябры заменять на нужные строки по определенным правилам. Собственно, это я уже писала...

А также надеятся, что процессы глобализации когда-нибудь вынудят MS переписать редактор ресурсов, и мы до этого доживем. smile


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1685 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.