Она скорее всего взяла региональные настройки, где прописано что ANSI Code Page - это 1251 в данном случае. Я думаю, лучше указать кодировку напрямую - вместо CP_ACP использовать 1251.BBB писал(а): Правда теперь вот думаю, а как это ф-я MultiByteToWideChar разобралась, что переданная ей строка содержит русские буквы, а не западноевропейские (т.е., например символ с кодом 192 - это русская 'А', а не что-нибудь вроде немецкой 'A с крыжиком' ). Ведь, как я понял, функции MultiByteToWideChar не указывается "кодовая страница" (кажется, это так называется). Остается предположить, что эта функция использует какие-то настройки данной Windows?
Русские буквы в именах файлов.
Модератор: Absurd
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
2B OR NOT(2B) = FF
нашел эти константы (CP_ACP etc.) в виндовом инклюднике (WINNLS.H):Absurd писал(а):Она скорее всего взяла региональные настройки, где прописано что ANSI Code Page - это 1251 в данном случае. Я думаю, лучше указать кодировку напрямую - вместо CP_ACP использовать 1251.
Код: Выделить всё
//
// Code Page Default Values.
//
#define CP_ACP 0 // default to ANSI code page
#define CP_OEMCP 1 // default to OEM code page
#define CP_MACCP 2 // default to MAC code page
#define CP_THREAD_ACP 3 // current thread's ANSI code page
#define CP_SYMBOL 42 // SYMBOL translations
#define CP_UTF7 65000 // UTF-7 translation
#define CP_UTF8 65001 // UTF-8 translation
UPD: А! Понял ,что произошло! Похоже, один из символов MultiByteToWideChar не смогла преобразовать, и в результирующей строке заменила его знаком вопроса '?'. А файл, в имени которого знако вопроса, естественно, создать невозможно

-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Там не обязательно указывать одну из этих констант. Можно просто указать кодовую страницу виндовс. Например, 1251 - это кодовая страница русского языка в win32.BBB писал(а):нашел эти константы (CP_ACP etc.) в виндовом инклюднике (WINNLS.H):
2B OR NOT(2B) = FF
Ну, константы же могут иметь разныве значения и тип (число, строка). Я сунулся посмореть, что же эта константа на самом деле из себя представляет. Увидел, что число, прочитал еще раз твое сообщение (где говорилось, что вместо CP_ ACP надо указать 1251; я-то сперва подумал, что надо найти соответсвующую константу, что-нибудь вроде CP_1251), и предположил, что просто достаточно указать именно само это числоAbsurd писал(а):Там не обязательно указывать одну из этих констант. Можно просто указать кодовую страницу виндовс. Например, 1251 - это кодовая страница русского языка в win32.

(А то, что 1251 соответствует русскому, я худо-бедно догадался

Еще оказалось интересное значение 866 - русская DOS-кодировка, тоже вполне себе преобразует и туда, и обратно)