Форум: Форум C++Разное
Новые темы: 00
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Кто про что, а я опять про Unicode
 
 автор: asker++   (23.01.2012 в 17:48)   письмо автору
 
 

Когда объявляется Unicode строка в начало добавляется L, а когда обычная char-строка, в начало ничего не добавляется?
wchar_t uni[] = L"Unicode-строка";
char str[] = "Обычная строка";
Правильно я понимаю? Т.е. если проект с мультибайтовой кодировкой используем первое определение, а если в однобайтовой, то второе?

  Ответить  
 
 автор: cheops   (23.01.2012 в 18:34)   письмо автору
 
   для: asker++   (23.01.2012 в 17:48)
 

Вообще по стандарту C++ да, все именно так. Другое дело, что если вы пользуетесь Visual Studio, то у вас есть возможность писать обобщенный код, который позволит в случае чего откомпилировать проект и под однобайтовую кодировку, и под юникод. Для этого вместо wchar_t и char следует использовать TCHAR, а вместо L использовать один из макросов _T, TEXT или _TEXT
TCHAR unistr[] = _T("А чего захотите, то и будет");
TCHAR unistr[] = _TEXT("А чего захотите, то и будет");
TCHAR unistr[] = TEXT("А чего захотите, то и будет");
Если проект определен как Unicode-проект, то вместо TCHAR подставится wchar_t, а вместо _T - L. Если же проект определен как ASCII, то вместо TCHAR подставится char, а вместо _T ничего не подставится.
Аналогично с другими функциями, особенно, WinAPI, все они на самом деле имеют суффикс A (ASCII) или W (Unicode), который определяет в какой форме функция принимает и возвращает параметры, однако, на деле вы используете функцию без префикса, а выбор в пользу той или иной функции осуществляется в зависимости от выбора типа проекта. Но если WinAPI - это детище Microsoft, оно как хочет может его переделать, то стандарт переделать нельзя, поэтому для стандартных функций вроде main() или C-функций для работы со строками ввели аналоги, начинающиеся с символов подчеркивания - они тоже заменяются в зависимости от выбора однобайтового или многобайтового набора символов.

  Ответить  
 
 автор: asker++   (23.01.2012 в 19:00)   письмо автору
 
   для: cheops   (23.01.2012 в 18:34)
 

Спасибо, а какой заголовочный файл нужно подключать?

Раз тут всё на макросах, в других системах код тоже можно использовать? Просто нужно будет переопределить макросы? К этому TCHAR можно применять sizeof() или есть какие-то подводные камни?

  Ответить  
 
 автор: cheops   (23.01.2012 в 19:18)   письмо автору
 
   для: asker++   (23.01.2012 в 19:00)
 

>Спасибо, а какой заголовочный файл нужно подключать, чтобы воспользоваться?
#include <tchar.h>

>Раз тут всё на макросах, в других системах код тоже можно использовать? Просто нужно будет
>переопределить макросы?
Ну теоретически да, практически, все-равно придется много перерабатывать.

>К этому TCHAR можно применять sizeof() или есть какие-то
>подводные камни?
Да, можно совершенно спокойно применять sizeof().

  Ответить  
 
 автор: asker++   (23.01.2012 в 19:19)   письмо автору
 
   для: cheops   (23.01.2012 в 19:18)
 

Спасибо, ещё раз!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования