Что нового

проблемы с перекодировкой

Sergeich

Новичок
Сообщения
10
Репутация
0
установил Autoit попробывал сделать программу, что то получилось, что то нет.
Ближе к проблеме:
существует несколько полей для ввода информации, вся информация успешно записывается в файл, но в нашей конторе используются программы под MS-DOS и поэтому весь текст должен быть в кодировке ASCII и вся загвоздка как текст перекодировать?

заранее спасибо за помощь
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
проблемы при отображении текста взятого из дос-приложения или при попытке в дос-приложение запихнуть текст? что надо закодировать или декодировать?
 
Автор
Sergeich

Sergeich

Новичок
Сообщения
10
Репутация
0
после ввода получается файл с текстом он с кодировкой винды, в досе он не отображается корректно. закодировать надо уже полученный файл или до записи в файл, чесно я не нашел как это сделать =(
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Sergeich [?]
акодировать надо уже полученный файл или до записи в файл
В какую кодировку нужно кодировать, и с какой?


Добавлено:
Сообщение автоматически объединено:

И желательно пример записи в файл и получение текста.
 

beve

Осваивающий
Сообщения
104
Репутация
31
Может это подойдет:?
Код:
$strANSI= "Подключение по локальной сети"
$strOEM = _StringToOEM($strANSI)
MsgBox(0,'',"Текст в ANSI: "& $strANSI &@CRLF& _
            "Текст в OEM : "& $strOEM )

Func _StringToOEM($strText)
    Local $oem = DllStructCreate("char["& StringLen($strText)+1 &"]")
    Local $ret = DllCall("User32.dll", "int", "CharToOem", "str", $strText, "ptr", DllStructGetPtr($oem))
    If Not(IsArray($ret)) Then Return SetError(1, 0, '') ; ошибка DLL
    If $ret[0]=0 Then Return SetError(2, $ret[0], '') ; ошибка функции
    Return DllStructGetData($oem, 1)
EndFunc  ;==> _StringToOEM
 
Автор
Sergeich

Sergeich

Новичок
Сообщения
10
Репутация
0
текст вводится в файл таким образом:

Код:
$fam = GUICtrlCreateInput("", 180, 10, 280, 20)
FileWrite($file, "Line1"& $fam & @CRLF )


а надо что бы сохранялось либо в ASCII либо Win-866
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Sergeich [?]
текст вводится в файл таким образом:
хм... а зачем в файл записывать хендл от Input? Если хочешь именно содержимое записать, то надо считать с этого поля значение.
Код:
$sData = GUICtrlRead($fam)
FileWrite($file, 'Line: ' & $sData & @CRLF)
 
Автор
Sergeich

Sergeich

Новичок
Сообщения
10
Репутация
0
Код:
#include <GuiConstants.au3>
#include <Word.au3>
#include <Encoding.au3>
GuiCreate("IC - ", 420, 550,(@DesktopWidth-469)/2, (@DesktopHeight-639)/2 , $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS)

$file = fileopen("IC1.txt", 1)

; Check if file opened for writing OK
If $file = -1 Then
	Beep(1)
	MsgBox(0, "Ошибка", "Закройте файл.")
	Exit
EndIf
$TEXT = GUICtrlCreateEdit("", 105, 10, 300, 20, $ES_AUTOVSCROLL +  $ES_MULTILINE + $ES_WANTRETURN)
$TEXT1 = GUICtrlCreateEdit("", 105, 40, 300, 20, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
$TEXT2 = GUICtrlCreateEdit("", 105, 70, 300, 20, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
$TEXT3 = GUICtrlCreateEdit("", 105, 100, 300, 20, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
$TEXT4 = GUICtrlCreateEdit("", 105, 130, 300, 20, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
$TEXT5 = GUICtrlCreateEdit("", 105, 160, 300, 20, $ES_AUTOVSCROLL +  $ES_MULTILINE + $ES_WANTRETURN)
$TEXT6 = GUICtrlCreateEdit("", 105, 190, 300, 20, $ES_AUTOVSCROLL +  $ES_MULTILINE + $ES_WANTRETURN)
$TEXT7 = GUICtrlCreateEdit("", 105, 220, 300, 20, $ES_AUTOVSCROLL +  $ES_MULTILINE + $ES_WANTRETURN)
$BTNPREVIEW = GUICtrlCreateButton("&Просмотр", 305, 245, 100)
GUICtrlSetTip(-1, "Show the MessageBox")
$BTNCOPY = GUICtrlCreateButton("&Copy", 120, 510, 100)
GUICtrlSetTip(-1, "Copy the generated AutoIt code to the Clipboard")
$BTNEXIT = GUICtrlCreateButton("&Закрыть", 230, 510, 100)

GUICtrlSetTip(-1, "Quit the program")
GuiSetState()
$a = ""
$b = "--------------------------------------------------------------------------------------------"& @CRLF
$c = "                ФАМИЛИЯ:"
$d = "                           ИМЯ:"
$z = "                ОТЧЕСТВО:"
$dd ="   ДАТА РОЖДЕНИЯ:"
$e = "МЕСТО РОЖДЕНИЯ:"
$k = "     ЦЕЛЬ ПРОВЕРКИ:"
$l = "--------------------------------------------------------------------------------------------"& @CRLF
$m ="               ПОДПИСАЛ:"
$n ="        ИСПОЛНИТЕЛЬ:"
$sData = GUICtrlRead($TEXT)
$s=_StringIsUTF8Format($sData)
While 1
   $MSG = GUIGetMsg()
   Select
      Case $MSG = $GUI_EVENT_CLOSE Or $MSG = $BTNEXIT
         Exit
	 Case $MSG = $BTNPREVIEW
		 $TEXT10 = GUICtrlCreateEdit($a & $b & $c & GUICtrlRead($TEXT)& @CRLF & $d & GUICtrlRead($TEXT1)& @CRLF& $z&GUICtrlRead($TEXT2)& @CRLF& $e&GUICtrlRead($TEXT4)& @CRLF& $dd&GUICtrlRead($TEXT3)& @CRLF& $k&GUICtrlRead($TEXT5)& @CRLF & $l&$m&GUICtrlRead($TEXT6)&@CRLF &$n&GUICtrlRead($TEXT7)& @CRLF& @CRLF, 10, 290, 300, 200, $ES_AUTOVSCROLL +  $ES_MULTILINE + $ES_WANTRETURN)
	 Case $MSG = $BTNCOPY
		 MsgBox(4096,"Уведомление","Данные сохранены в файл.",4)
		 MsgBox(0,'',"Текст в ANSI: "&$sData &@CRLF&"Текст в OEM : "& $s )
		 Case HotKeySet("{TAB}","ShowMessage")
	 
	 EndSelect

 WEnd	


$q=GUICtrlRead($TEXT)
$s=_StringANSI2OEM($q)
$w=_StringANSI2OEM(GUICtrlRead($TEXT1))
$p=_StringANSI2OEM(GUICtrlRead($TEXT2))
$r=_StringANSI2OEM(GUICtrlRead($TEXT3))
$t=_StringANSI2OEM(GUICtrlRead($TEXT4))
$y=_StringANSI2OEM(GUICtrlRead($TEXT5))
$u=_StringANSI2OEM(GUICtrlRead($TEXT6))
$i=_StringANSI2OEM(GUICtrlRead($TEXT7))


Func ShowMessage()
    MsgBox(4096,"Уведомление","Данные сохранены в файл.",4)
	FileWrite($file, ""& @CRLF)
			FileWrite($file, " ---------------------------------------------- "& @CRLF)
			FileWrite($file, "        ФАМИЛИЯ:  "& GUICtrlRead($TEXT) & @CRLF)
			
			FileWrite($file, "            ИМЯ:  "& GUICtrlRead($TEXT1) & @CRLF)
			
			FileWrite($file, "       ОТЧЕСТВО:  "&GUICtrlRead($TEXT2) & @CRLF)
			
			FileWrite($file, "  ДАТА РОЖДЕНИЯ:  "&GUICtrlRead($TEXT3) & @CRLF)
			
			FileWrite($file, " МЕСТО РОЖДЕНИЯ:  "&GUICtrlRead($TEXT4)& @CRLF)
			
			FileWrite($file, "  ЦЕЛЬ ПРОВЕРКИ:  "&GUICtrlRead($TEXT5) & @CRLF)
			FileWrite($file, "           ДАТА:  "&GUICtrlRead($datekal)&@CRLF)
			FileWrite($file, " ---------------------------------------------- "& @CRLF)
			FileWrite($file, "       ПОДПИСАЛ:  "&GUICtrlRead($TEXT6) & @CRLF)
			FileWrite($file, "    ИСПОЛНИТЕЛЬ:  "&GUICtrlRead($TEXT7) & @CRLF)
			
			
			FileClose($file)
			
			
		EndFunc
Exit

помог конечно _StringToOEM но как сделать так что бы он кодировал не фразу $strANSI= "Подключение по локальной сети" а ту информациюс полей (TEXT и так далее)?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Sergeich [?]
как сделать так что бы он кодировал не фразу $strANSI= "Подключение по локальной сети" а ту информациюс полей (TEXT и так далее)?
Так ведь оно кодируется и не используется. И вообще в скрипте много недопустимых ошибок:

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <Word.au3>
#include <Encoding.au3>
;

HotKeySet("{TAB}", "ShowMessage")

GUICreate("IC - ", 420, 550, (@DesktopWidth - 469) / 2, (@DesktopHeight - 639) / 2, _
	$WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS)

$TEXT = GUICtrlCreateEdit("", 105, 10, 300, 20, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
$TEXT1 = GUICtrlCreateEdit("", 105, 40, 300, 20, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
$TEXT2 = GUICtrlCreateEdit("", 105, 70, 300, 20, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
$TEXT3 = GUICtrlCreateEdit("", 105, 100, 300, 20, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
$TEXT4 = GUICtrlCreateEdit("", 105, 130, 300, 20, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
$TEXT5 = GUICtrlCreateEdit("", 105, 160, 300, 20, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
$TEXT6 = GUICtrlCreateEdit("", 105, 190, 300, 20, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
$TEXT7 = GUICtrlCreateEdit("", 105, 220, 300, 20, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)

$TEXT10 = GUICtrlCreateEdit("", 10, 290, 300, 200, $ES_AUTOVSCROLL + $ES_MULTILINE + $ES_WANTRETURN)

$BTNPREVIEW = GUICtrlCreateButton("&Просмотр", 305, 245, 100)
GUICtrlSetTip(-1, "Show the MessageBox")
$BTNCOPY = GUICtrlCreateButton("&Copy", 120, 510, 100)
GUICtrlSetTip(-1, "Copy the generated AutoIt code to the Clipboard")
$BTNEXIT = GUICtrlCreateButton("&Закрыть", 230, 510, 100)

GUICtrlSetTip(-1, "Quit the program")
GUISetState()

$sData = "--------------------------------------------------------------------------------------------" & @CRLF
$sData &= "                ФАМИЛИЯ: %s" & @CRLF
$sData &= "                           ИМЯ: %s" & @CRLF
$sData &= "                ОТЧЕСТВО: %s" & @CRLF
$sData &= "   ДАТА РОЖДЕНИЯ: %s" & @CRLF
$sData &= "МЕСТО РОЖДЕНИЯ: %s" & @CRLF
$sData &= "     ЦЕЛЬ ПРОВЕРКИ: %s" & @CRLF
$sData &= "--------------------------------------------------------------------------------------------" & @CRLF
$sData &= "               ПОДПИСАЛ: %s" & @CRLF
$sData &= "        ИСПОЛНИТЕЛЬ: %s" & @CRLF

While 1
	$MSG = GUIGetMsg()
	Select
		Case $MSG = $GUI_EVENT_CLOSE Or $MSG = $BTNEXIT
			Exit
		Case $MSG = $BTNPREVIEW
			$sPrewview = StringFormat($sData, _
				GUICtrlRead($TEXT), GUICtrlRead($TEXT1), GUICtrlRead($TEXT2), _
				GUICtrlRead($TEXT4), GUICtrlRead($TEXT3), GUICtrlRead($TEXT5), GUICtrlRead($TEXT6), GUICtrlRead($TEXT7))
			
			GUICtrlSetData($TEXT10, $sPrewview)
		Case $MSG = $BTNCOPY
			MsgBox(4096, "Уведомление", "Данные сохранены в файл.", 4)
			;MsgBox(0, '', "Текст в ANSI: " & $sData & @CRLF & "Текст в OEM : " & $s)
	EndSelect

WEnd

Func ShowMessage()
	$file = FileOpen("IC1.txt", 1)
	
	; Check if file opened for writing OK
	If $file = -1 Then
		Beep(1)
		MsgBox(0, "Ошибка", "Закройте файл.")
		Return
	EndIf
	
	MsgBox(4096, "Уведомление", "Данные сохранены в файл.", 4)
	
	FileWrite($file, "" & @CRLF)
	FileWrite($file, " ---------------------------------------------- " & @CRLF)
	FileWrite($file, "        ФАМИЛИЯ:  " & _StringANSI2OEM(GUICtrlRead($TEXT)) & @CRLF)
	FileWrite($file, "            ИМЯ:  " & _StringANSI2OEM(GUICtrlRead($TEXT1)) & @CRLF)
	FileWrite($file, "       ОТЧЕСТВО:  " & _StringANSI2OEM(GUICtrlRead($TEXT2)) & @CRLF)
	FileWrite($file, "  ДАТА РОЖДЕНИЯ:  " & _StringANSI2OEM(GUICtrlRead($TEXT3)) & @CRLF)
	FileWrite($file, " МЕСТО РОЖДЕНИЯ:  " & _StringANSI2OEM(GUICtrlRead($TEXT4)) & @CRLF)
	FileWrite($file, "  ЦЕЛЬ ПРОВЕРКИ:  " & _StringANSI2OEM(GUICtrlRead($TEXT5)) & @CRLF)
	;$datekal не существует
	;FileWrite($file, "           ДАТА:  " & GUICtrlRead($datekal) & @CRLF)
	FileWrite($file, " ---------------------------------------------- " & @CRLF)
	FileWrite($file, "       ПОДПИСАЛ:  " & _StringANSI2OEM(GUICtrlRead($TEXT6)) & @CRLF)
	FileWrite($file, "    ИСПОЛНИТЕЛЬ:  " & _StringANSI2OEM(GUICtrlRead($TEXT7)) & @CRLF)
	
	FileClose($file)
EndFunc   ;==>ShowMessage
 
Верх