Что нового

Перекодировать из DOS кодировки

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Как мне получить "нормальные" :beer: буквы в окне сообщения ?

Код:
#include <Constants.au3>

$iPID = Run(@ComSpec &' /C '& 'ipconfig.exe', @SystemDir, @SW_HIDE, $STDOUT_CHILD)
$sTXT = ""

While 1
    $sTXT &= StdoutRead($iPID)
    If @error Then ExitLoop
Wend

;~ ConsoleWrite($sTXT &@CRLF)
MsgBox(0,"", $sTXT)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
FlatX007
У меня в XP SP3 нормально отображается и без перекодировки, попробуйте так:
Код:
#include <Constants.au3>
#include <Encoding.au3>

$iPID = Run(@ComSpec & ' /C ipconfig.exe', @SystemDir, @SW_HIDE, $STDOUT_CHILD)
$sTXT = ""

While 1
	$sTXT &= StdoutRead($iPID)
	If @error Then ExitLoop
WEnd
$sTXT = _Encoding_CyrillicTo1251($sTXT)

MsgBox(0, "", $sTXT)

Encoding UDF - Библиотека для работы с кодировками строк
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
скорее, надо воспользоваться функцией
Код:
_Encoding_OEM2ANSI($sTXT)

из этой же либы
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Kaster
Может быть, для данного, конкретного примера Вы правы. Я основываюсь на этом примере:
Код:
#include <Constants.au3>
#include <Encoding.au3>

$sLog = ''
$hRun = Run(@ComSpec & " /C schtasks", "", @SW_HIDE, $STDOUT_CHILD)
While 1
    $sLog &= StdoutRead($hRun)
    If @error Then ExitLoop
    Sleep(10)
WEnd
$sLog = _Encoding_CyrillicTo1251($sLog)
MsgBox(0, "", $sLog)
У меня, если закомментировать строку $sLog = _Encoding_CyrillicTo1251($sLog), вместо русских букв показывает кракозябры.

PS
И с Вашем вариантом _Encoding_OEM2ANSI($sTXT) - так же все по русски.
А какой вариант лучше? То есть более универсален?
 
Автор
F

FlatX007

Tattoo!
Сообщения
197
Репутация
35
madmasles на Win 7 AutoIT v.3.3.6.0 - всё отлично сработало :beer:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
madmasles
мне кажется вызов функции oemtochar из user32.dll (_Encoding_OEM2ANSI из либы) более универсален, т.к. может перекодировать при любой локали винды. а вот 866to1251 (одна из ветвей _Encoding_CyrillicTo1251 из той же либы, когда обрабатывается текст окна консоли) только если установленная локаль русская.
 
Верх