Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование Unicode-строк в проектах  (Прочитано 21223 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« : 25-08-2008 08:08 » 

Если проект гарантированно и бесповоротно использует юникод - возможно, стоит константные строки сразу юникодовые использовать, без подстановки макросом (L"строка").

Сколько раз я уже наступал на такое. Сначало землю кушают, убеждают тебя, что кроме юникода никакой нечисти, а потом начинается... MSLU... ANSI... Посему я только за _T. Кушать не просит и работает во всех случаях, но в случае чего времени очень много сбережёт. И потом уже, как говорится, "не будет мучительно больно за бесцельно" Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 25-08-2008 18:33 » 

Джон, если использовать строки и потоки ввода-вывода из той же STL, _T не поможет. Насколько я себе представляю относительно вменяемое решение, придётся делать кучу своих typedef-ов, переопределяющих STL-евские для каждого варианта - юникод, не юникод.
Или в каждом удобном и неудобном месте конвертировать, что ненадёжно.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 26-08-2008 03:52 » 

а что у STL так всё запущено ?
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 26-08-2008 08:25 » 

Вад, не понял... Речь идёт о константных строках в коде те о записи "text", L"text", _T("text"). Причём здесь STL или какая ещё другая библиотека?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 26-08-2008 19:09 » new

Алексей1153++, у STL есть 2 разноименных реализации шаблонов, работающих с символами: для char и для wchar_t. Свести всё к одному имени выйдет только объявлением своих псевдонимов (или реализаций) в блоках условной компиляции.

Джон, я веду речь о более сложных случаях, чем вывод константы. Скажем, есть у тебя слой кроссплатформенной логики, которая, в числе прочего, работает, скажем, с текстовыми файлами. Можно, конечно, вокруг WinAPI сделать обёртку, а потом реализовывать другой вариант для любой другой платформы. А можно использовать <fstream>. Но для этого понадобится определиться с форматом символов. Ну и если потребуется отображать некие хранимые в файле данные или просто задать имя для файла из GUI, то в случае определяемого на этапе компиляции формата символов понадобится переводить все строки, вводимые пользователем, к нужному фиксированному формату.

В общем, проблема такова: как быть с юникодом, если нужна простая и понятная кросс-платформенная логика, а ещё нужен оконный интерфейс, отображающий данные, подготовленные логикой.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 26-08-2008 21:46 » 

Вад, эт ты уже в дебри полез. Никто и не говорит, что с юникодом всё так просто.
Я не понял просто как ты спроецировал дефайн _T на потоки ввода вывода STL. Этот макрос предназначен только для универсальности использования константных строк в коде, при компиляции в мелкософтовской студии. Который в зависимости от наличия ключа UNICODE (_UNICODE) либо оставляет константную строку как она есть, либо кастит её в длинную строку L"". И всё. О какой кроссплатформенности ты говоришь? Если под 98ой виндой без MSLU ты можешь про юникод ваще забыть. Ага

ps и название темы следует таким образом уточнить - добавить "константных" перед "Unicode-строк"
« Последнее редактирование: 26-08-2008 21:47 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 27-08-2008 18:33 » 

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

Кстати, раз уж речь идёт о строковых константах для отображения сообщений в диалогах, то их, возможно, стоит в ресурсы засунуть и соответственно оттуда использовать. А то константы в коде - это иногда моветон Улыбаюсь
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 27-08-2008 23:03 » 

для отображения сообщений в диалогах, то их, возможно, стоит в ресурсы засунуть

Ничего не возможно и не стоит. Ага Только в ресурсы и никуда иначе. Тем более, что ресурсы всегда компилируются в юникод. Это самое оптимальное решение для текстовых ресурсов.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
AndreyCh
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 06-09-2008 16:55 » 

Unicod - Это тожа таблица символов, тока сильно большая
U+'7F' - вроде компактно записано, но вот во что U преврашается после ввода в контрол, кто-нить видел верхушку этой таблички?
коды 8ХХХ, 9ХХХ.
Проблемы преобразования возникают когда в контор заводишь не символы, а коды alt+127 например
Знаю - что 127 в аски - это <DEL>, а вот alt+129 - в отладке сразу получаем 1040 UTF-8 по моему
При поддержке языков для типового компа в РФ рус/en это будет кирилическая 'А',
хм если активен 1033 т.е. en.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 06-09-2008 19:42 » 

Unicod - Это тожа таблица символов, тока сильно большая

Да нууууу? Ты эта сирёзна? Нука пападробний.


зы и сразу, если не сложно, где такую траву берёшь?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
AndreyCh
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 07-09-2008 13:46 » 

На кубани трава на обочине растет Улыбаюсь
А с этим делом столкнулся када делал особоизвращенную форму запроса пароля для военных...
на w2003 серваке все так и было.
результаты xor смвола из пароля и из случайной строки часто вылазили за 127. Эт после того как смещение ввел до первого печатаемого символа. ибо коды от 0 до 32 - ваще кто куда попадают при преобразовании.
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #11 : 08-09-2008 03:46 » 

AndreyCh, с чем столкнулся, то?
Записан

Странно всё это....
AndreyCh
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 08-09-2008 17:08 » 

 Улыбаюсь
Дык, эта с UNICODом, для XP нужно было сделать диалог ввода пароля в особоизвращенной форме

т.е. окна
пользователь
строка rang символов
и ввод результата s^p+32
печатные символы не всегда получались - приходилось вводить через alt+(код)
так 128  - пока дело доходило до обработки становился 1040 "А" 129 - "Б" 1041 и т.д.
а все ASCII 0-31, 127 - ваще улетали кто-куда, т.е. код вводишь один, а в результате он заменяется на код U+?. Пытался бороться, но потом сделал таблицу перекодировки
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #13 : 09-09-2008 08:46 » 

Ничего не понял.
Записан

Странно всё это....
sss
Специалист

ru
Offline Offline

« Ответ #14 : 09-09-2008 08:50 » 

И я...  Понял только про траву.

Что значит UNICODE для XP?
Записан

while (8==8)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #15 : 09-09-2008 09:45 » 

И я...  Понял только про траву.

Это главное - остальное маскировка.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
AndreyCh
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 12-09-2008 18:58 » 

 Улыбаюсь
Записан
AndreyCh
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 12-09-2008 19:05 » 

Читать надо так
 
Дык, эта с UNICODом - это мухи...
для XP нужно было сделать диалог ввода пароля  - это котлеты...
раздельно т.е.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines