Скажите, пожалуйста, возможно ли вообще в VC6 иметь строковую константу с русским текстом в Unicode?
Имеем такую элементарную операцию:
_tcscpy(szHello, _T("Привет всем!"));
Компилируем проект с определением символов UNICODE и _UNICODE, смотрим внутрь ЕХЕшника, и видим следующее:
CF 00 F0 00 E8 00 E2 00 E5 00 F2 00 20 00 E2 00 П р и в е т в
F1 00 E5 00 EC 00 21 00 00 00 с е м !
То есть это вовсе не юникод, а просто CHAR, тупо конвертированный в WCHAR расширением каждого байта в слово. Соответственно ничего не работает как предполагалось — и текст не выводится по-русски, и не работает сравнение с русским текстом, который уже в юникоде.
Это так и должно быть или я чего-то не понимаю?
Спасибо.
23.01.04 11:41: Перенесено модератором из 'C/C++' — ПК
Здравствуйте, alpax, Вы писали:
a> Скажите, пожалуйста, возможно ли вообще в VC6 иметь строковую константу
a> с русским текстом в Unicode?
#pragma setlocale ?
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, alpax, Вы писали:
A>Скажите, пожалуйста, возможно ли вообще в VC6 иметь строковую константу с русским текстом в Unicode?
A>Имеем такую элементарную операцию:
A>A>_tcscpy(szHello, _T("Привет всем!"));
A>
A>Компилируем проект с определением символов UNICODE и _UNICODE, смотрим внутрь ЕХЕшника, и видим следующее:
A>A>CF 00 F0 00 E8 00 E2 00 E5 00 F2 00 20 00 E2 00 П р и в е т в
A>F1 00 E5 00 EC 00 21 00 00 00 с е м !
A>
A>То есть это вовсе не юникод, а просто CHAR, тупо конвертированный в WCHAR расширением каждого байта в слово. Соответственно ничего не работает как предполагалось — и текст не выводится по-русски, и не работает сравнение с русским текстом, который уже в юникоде.
A>Это так и должно быть или я чего-то не понимаю?
A>Спасибо.
Макрос _TEXT(или _T) избирательно ставит L перед строковыми константами. При #define _UNICODE(для C) или UNICODE(для Windows) в tchar.h происходит движение:
..
#define _TEXT(x) L##x
..
А при L компилятор, размещая строку в области данных программы, ставит между всеми символами нулевые байты...
Попробуй MultiByteToWideChar..
Склонность к сумашествию передается по наследству — но вам ничего не мешает легко заполучить ее благодаря собственным детишкам.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>#pragma setlocale ?
Точно, оно!
#pragma setlocale("Russian_Russia.1251")
Спасибо!