русский Unicode текст в константах
От: alpax  
Дата: 23.01.04 03:22
Оценка:
Скажите, пожалуйста, возможно ли вообще в 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++' — ПК
Re: русский Unicode текст в константах
От: Павел Кузнецов  
Дата: 23.01.04 08:08
Оценка: 22 (2)
Здравствуйте, alpax, Вы писали:

a> Скажите, пожалуйста, возможно ли вообще в VC6 иметь строковую константу

a> с русским текстом в Unicode?

#pragma setlocale ?
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re: русский Unicode текст в константах
От: Esprit Украина  
Дата: 23.01.04 08:27
Оценка:
Здравствуйте, 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..
Склонность к сумашествию передается по наследству — но вам ничего не мешает легко заполучить ее благодаря собственным детишкам.
Re[2]: русский Unicode текст в константах
От: alpax  
Дата: 23.01.04 08:27
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>#pragma setlocale ?


Точно, оно!
#pragma setlocale("Russian_Russia.1251")

Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.