2 / 2 / 0
Регистрация: 22.09.2010
Сообщений: 8
|
|||||||||||
1 | |||||||||||
char и cp-86622.09.2010, 04:49. Показов 2963. Ответов 4
Метки нет (Все метки)
Здравствуйте! У меня возникла проблема в диалоговом MFC приложении(VS 2010) следующего рода:
Мое приложение читает память dos-программы, запущенной в dos-boxе:
Затем мне необходимо отфильтровать прочитанную строку, оставив там только некоторые символы, буквы и цифры, делаю проверку в цикле, заменяя все лишние символы пробелами:
Будьте добры, подскажите пожалуйста где ошибка, или хотя-бы намекните, если решение слишком очевидно P.S. Моя программа не наносит вреда окружающим и не ворует личную информацию.
0
|
22.09.2010, 04:49 | |
Ответы с готовыми решениями:
4
Объясните, что означает wcout.imbue( locale( "rus_rus.866" ) ); и wcin.imbue( locale( "rus_rus.866" ) ); ? 866 Методы Char.IsLower Char.IsUpper Char.IsDigit Char unsigned char signed char длинна Кааак |
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
22.09.2010, 05:15 | 2 |
Я че-то не очень понял, что нужно заменять пробелом. Можете сказать, что нужно заменить на пробел?
0
|
2 / 2 / 0
Регистрация: 22.09.2010
Сообщений: 8
|
|
22.09.2010, 05:26 [ТС] | 3 |
Все, что не попадает в диапазоны if-ов, диапазоны указаны в виде кодов символов CP-866. Проще говоря, нужно чтоб прочитанной строке остались только русские/латинские буквы, цифры, и некоторые символы (".", "%", ":", etc.).
Вместо замены пробелами можно просто добавлять lpBuffer2[iz] к edtDisplay, если символ подходит, для нахождения ошибки упростил задачу.
0
|
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
22.09.2010, 05:46 | 4 |
Судя по этой таблице первый диапазон русских букв заканчивается на 175-ом символе (символ "п"). В Вашем коде на 207-ом.
А так вроде обработка символов идет вполне нормально. Только вот вопрос такой: как EditBox воспринимает строку с кодировкой CP866?
1
|
2 / 2 / 0
Регистрация: 22.09.2010
Сообщений: 8
|
||||||
22.09.2010, 07:44 [ТС] | 5 | |||||
Спасибо, диапазоны поправил на 32..122, 128..175,224..239, результат тот же. Попробовал подставить диапазоны русских букв из CP1251-не помогло.
В текст бокс выводятся символы, у которых код в 1251 равен коду моей буквы в 866, т.е. допустим я считал байт со значением 141 (0x8d), вместо буквы "Н" из CP-866 он показывает Cyrylic Capital Kje из CP-1251, в принципе мне это не важно, я записываю строку в текстовый файл и при открытии указываю кодировку CP-866, но почему визуал не хочет упорно узнавать русские буквы - загадка. Добавлено через 32 минуты Век живи-век учись. Проблема решилась следующим образом:
После уточнения типа он вдруг "разучился" добавлять его к CString, для чего пришлось выполнять бессмысленый цикл по "приведению" unsigned char к char(тоже unsigned но без этого слова)
0
|
22.09.2010, 07:44 | |
22.09.2010, 07:44 | |
Помогаю со студенческими работами здесь
5
866=> Windows-кодировка... TStringList и OEM-866 Кодировка OEM 866 866-MS-DOS to 1251-MS-Windows Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |