Добрый день. Я пишу программу, которая читает память из процесса (hl2.exe) и записывает в файл. Но при попытке считать символы, которые не неходятся в стандартной таблице ANSI ( я имею в виду русские символы ), выводятся какие-то кракозябры. Пробовал использовать setlocale, CharToOem. Ничего не помогает PS. Символы не в юникоде.
m1nt@ll, хекс аналог какой-нибудь строчки из процесса выложи проще будет сказать что за кодировка используется
Вот пример вывода: Code: Radar base: 1EB3D134 Client count: 9 0: test_С'РчС_С'[100]; Name in hex: 0x00000074 0x00000065 0x00000073 0x00000074 0x0000005F 0xFFFFFF91 0x00000027 0xFFFFFF90 0xFFFFFFE7 0xFFFFFF91 0x0000005F 0xFFFFFF91 0x00000027 1: Elmer[100]; Name in hex: 0x00000045 0x0000006C 0x0000006D 0x00000065 0x00000072 2: Henry[100]; Name in hex: 0x00000048 0x00000065 0x0000006E 0x00000072 0x00000079 3: Tim[100]; Name in hex: 0x00000054 0x00000069 0x0000006D 4: Albert[100]; Name in hex: 0x00000041 0x0000006C 0x00000062 0x00000065 0x00000 072 0x00000074 5: Martin[100]; Name in hex: 0x0000004D 0x00000061 0x00000072 0x00000074 0x00000 069 0x0000006E 6: Wyatt[100]; Name in hex: 0x00000057 0x00000079 0x00000061 0x00000074 0x00000074 7: Clarence[100]; Name in hex: 0x00000043 0x0000006C 0x00000061 0x00000072 0x000 00065 0x0000006E 0x00000063 0x00000065 8: Jason[100]; Name in hex: 0x0000004A 0x00000061 0x00000073 0x0000006F 0x000000 6E У индекса 0 ник test_тест Вот функция вывода имени, думаю, зря к DWORD* привел). HTML: for( int i = 0; i < strlen( szNameBuffer ); i++ ) { std::cout << "0x" << (DWORD*)szNameBuffer[i] << " "; } PS. Мне кажется, символы хранятся в UCHAR'е, там больше места для хранения символа, нежели в CHAR'e, но вот как их прочитать оттуда? =)
Благодарю за внимательное прочтение моего первого поста. PS. Возможно не уточнил, что OemToCharA тоже не работает.
0: test_С'РчС_С'[100]; Name in hex: 0x74 0x65 0x73 0x74 0x5F 0x91 0x27 0x90 0xE7 0x91 0x5F 0x91 0x27 ANSI -> OEM -> HEX test_С'РчС_С' -> test_‘'ђз‘_‘' -> 0x74, 0x65, 0x73, 0x74, 0x5F, 0x91, 0x27, 0x90, 0xE7, 0x91, 0x5F, 0x91, 0x27 ну и кто читает невнимательно?
Я не совсем понял, что вы имеете в виду. Согласитесь, что Code: ‘'ђз‘_‘' не очень похоже на Code: тест . Русские символы, как я вижу, хранятся в 2х байтах, а английские в 1. Как это вообще понимать? PS. Сорри, если чего не понял. Раньше не имел опыта в изменении кодировок.
так и понимать. есть 8 бит таблицы ANSI, 2 в степени 8 = 256 различных вариантов представления цирковых клоунов текста. первые 0-127 символов - строго US 001 кодинг со времён телеграфа. остальные - до 255, это зависит от региональных установок компа, мейл-сервера и погоды. сам переводил вручную, названия нечитабельных кракозябрами фот в мейл от юных интернет-красавиц, с-хрен-пойми-какой-кодировкой они шлют мессаги )) в Вашем случае - utf-8 С'РчС_С и именно он так показывается на компе с русской кодировкой. попробуйте в региональных настройках компа изменить - "Показывать non-Unicode" на англ и русс, и сравните.
объем перевода был небольшим, и сделал на коленках, набросав на js простейший браузер-ретранслятор. если нужно, должно быть на сайте Артёма, Лебедев который.
К сожалению, не нашел транслятор в JS скриптах сайта студии Лебедева, но, в любом случае, спасибо за наводку. Попробую найти исходник транслятора в сырцах NP++
Решил проблему, если кто-то столкнется с чем-то подобным, есть либа utfcpp. http://sourceforge.net/projects/utfcpp/