Страница 2 из 2

Re: Русские буквы в именах файлов.

Добавлено: 31 янв 2007, 12:57
Absurd
BBB писал(а): Правда теперь вот думаю, а как это ф-я MultiByteToWideChar разобралась, что переданная ей строка содержит русские буквы, а не западноевропейские (т.е., например символ с кодом 192 - это русская 'А', а не что-нибудь вроде немецкой 'A с крыжиком' ). Ведь, как я понял, функции MultiByteToWideChar не указывается "кодовая страница" (кажется, это так называется). Остается предположить, что эта функция использует какие-то настройки данной Windows?
Она скорее всего взяла региональные настройки, где прописано что ANSI Code Page - это 1251 в данном случае. Я думаю, лучше указать кодировку напрямую - вместо CP_ACP использовать 1251.

Re: Русские буквы в именах файлов.

Добавлено: 31 янв 2007, 13:47
BBB
Absurd писал(а):Она скорее всего взяла региональные настройки, где прописано что ANSI Code Page - это 1251 в данном случае. Я думаю, лучше указать кодировку напрямую - вместо CP_ACP использовать 1251.
нашел эти константы (CP_ACP etc.) в виндовом инклюднике (WINNLS.H):

Код: Выделить всё

//
//  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
Попробовал передавать в MultiByteToWideChar первым параметром 1251 - получилось (т.е. создался файл с русским именем). Попробовал 1250 - тоже создался (с неким нерусским именем). А вот на 1252 exception случился. Че-то не смогла она такой файл создать. Что-то имя файла не понравилось.

UPD: А! Понял ,что произошло! Похоже, один из символов MultiByteToWideChar не смогла преобразовать, и в результирующей строке заменила его знаком вопроса '?'. А файл, в имени которого знако вопроса, естественно, создать невозможно :)

Re: Русские буквы в именах файлов.

Добавлено: 31 янв 2007, 14:34
Absurd
BBB писал(а):нашел эти константы (CP_ACP etc.) в виндовом инклюднике (WINNLS.H):
Там не обязательно указывать одну из этих констант. Можно просто указать кодовую страницу виндовс. Например, 1251 - это кодовая страница русского языка в win32.

Re: Русские буквы в именах файлов.

Добавлено: 31 янв 2007, 15:24
BBB
Absurd писал(а):Там не обязательно указывать одну из этих констант. Можно просто указать кодовую страницу виндовс. Например, 1251 - это кодовая страница русского языка в win32.
Ну, константы же могут иметь разныве значения и тип (число, строка). Я сунулся посмореть, что же эта константа на самом деле из себя представляет. Увидел, что число, прочитал еще раз твое сообщение (где говорилось, что вместо CP_ ACP надо указать 1251; я-то сперва подумал, что надо найти соответсвующую константу, что-нибудь вроде CP_1251), и предположил, что просто достаточно указать именно само это число :)

(А то, что 1251 соответствует русскому, я худо-бедно догадался :)
Еще оказалось интересное значение 866 - русская DOS-кодировка, тоже вполне себе преобразует и туда, и обратно)

Re: Русские буквы в именах файлов.

Добавлено: 31 янв 2007, 15:42
Absurd
Винда еще по-тихому поддерживает koi-8, кодовая страница 0x5182, но я не проверял