Гугль ничего дельного не сказал, вот и придётся задать глупый вопрос. Как перевести из KOI8-R на чуловеческий язык, или хотяб на windows-1251 ? (программно конечно) Спасибо!
Что такое в вашем понимании и что ? Код (Text): WCHAR wStr[128]; char *pch = ptrToMyFuckingkoi8rString; int pchsize = (int)strlen(pch); MultiByteToWideChar(0x5182, 0, pch, pchsize+1, wStr, 128); WideCharToMultiByte(1251, 0, wStr, 128, pch, pchsize+1, NULL, NULL); Или тут
Самый правильный алгоритм перекодировки такой: 1. Ищем в Сети (или где-нибудь еще) описания требуемых кодовых страниц. Составляем таблицы кодов UTF-32 для символов 80h-FFh (128 двойных слов). 2. Берем таблицы для исходной и конечной кодовых страниц. Составляем таблицу перекодировки (256 байт). 3. Перекодируем текст обычным XLAT-ом. Какой из шагов вызывает затруднения?
ava, все 3 для меня как тёмный лес mail-check'ер пишу, там чистенько koi8 встречается, в принцапи вариант IceStudent меня устраивает, токо надо ещё сделать код рабочим Код (Text): .data pch db "7eX04ezs7/Dy7+vh9A==",0 wStr db 128 dup(0) pchsize dd ? .code start: invoke lstrlen,addr pch mov pchsize,eax invoke MultiByteToWideChar,5182,0,addr pch,pchsize+1,addr wStr,128 invoke WideCharToMultiByte,1251,0,addr wStr,128,addr pch,pchsize+1,NULL,NULL invoke MessageBox,0,addr wStr,addr pch,0 invoke ExitProcess,0 end start Что тут не правильно? Кстати, откуда 5182 ? Код (Text): CP_KOI8R 20866 CP_KOI8U 21866 При этих значениях тож борода.
Flasher Да, 20866. Только не используй статический буфер для перекодировки, а выделяй под него память. Потом, "7eX..." - это же base64.
Спасибо всем, кто откликнулся! Всё прекрасно работает, кстати, в после долгих истерзаний гугля нашёл вот ещё что, как раз про это и говорил ava. Код (Text): .data k2w_tbl db 16 dup(0) db 16 dup(0) db 00h,00h,00h,38h,00h,00h,00h,00h db 00h,00h,00h,00h,00h,00h,00h,00h db 00h,00h,00h,28h,00h,00h,00h,00h db 00h,00h,00h,00h,00h,00h,00h,00h db 7Eh,60h,61h,76h,64h,65h,74h,63h db 75h,68h,69h,6Ah,6Bh,6Ch,6Dh,6Eh db 6Fh,7Fh,70h,71h,72h,73h,66h,62h db 7Ch,7Bh,67h,78h,7Dh,79h,77h,7Ah db 5Eh,40h,41h,56h,44h,45h,54h,43h db 55h,48h,49h,4Ah,4Bh,4Ch,4Dh,4Eh db 4Fh,5Fh,50h,51h,52h,53h,46h,42h db 5Ch,5Bh,47h,58h,5Dh,59h,57h,5Ah .code koi2wins proc push esi push edi push ebx mov esi,eax mov edi,eax mov ebx,offset k2w_tbl decode_string: lodsb test al,80h jz dont_decode2 sub al,80h xlat add al,80h dont_decode2: stosb test al,al jnz decode_string pop ebx pop edi pop esi ret koi2wins endp start: mov eax,offset string call koi2wins