Что нового

Проблема с кодировкой при выполнении Run()

zarius

Новичок
Сообщения
8
Репутация
0
Вроде бы простейшая задача, а вот ведь...
Есть каталог, в нем файлы. Задача: обработать определенным образом файлы в расширением "*.zzz". Обработка файлов - выполнение приложения "obrab_zzz.exe [ИмяФайла].zzz"

Код:
Local $l_search = FileFindFirstFile("*.zzz")

	; Check if the search was successful
	If $l_search = -1 Then
		Exit
	EndIf

	While 1
		Local $l_file = FileFindNextFile($l_search)
		If @error Then ExitLoop

 		RunWait('obrab_zzz.exe ' & $l_file, $l_CurDir, @SW_HIDE)
	WEnd

	FileClose($l_search)


Код простейший, но проблема в том, что если в именах файлов встречаются русские буквы - в команду RunWait они уходят крокозябрами, соотв. обработка таких файлов не происходит. Пробовал _Encoding_ANSIToOEM и другие перекодировки из Encoding.au3 - не помогает. Как победить данную проблему?

P.S. Можно конечно обработку делать через создаваемый BAT файл, но хотелось бы всю работу делать из скрипта.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
zarius,
Нет у меня никаких кракозябров.
Код:
$s_Dir = @ScriptDir & '\'
$h_Search = FileFindFirstFile($s_Dir & '*')
If $h_Search = -1 Then Exit 13
While 1
    $s_File = FileFindNextFile($h_Search)
    If @error Then ExitLoop
	If @extended Then ContinueLoop
	ConsoleWrite('"' & $s_Dir & $s_File & '"' & @TAB & FileGetShortName($s_Dir & $s_File) & @LF)
WEnd
FileClose($h_Search)
 
Автор
Z

zarius

Новичок
Сообщения
8
Репутация
0
InnI
Про крокозябры узнал из реакции приложения "obrab_zzz.exe" - оно ругается что "файл [крокозябры].zzz не найден". При этом
Код:
MsgBox(0, "messege", 'obrab_zzz.exe ' & $l_file)
показывает нормальное имя файла.

madmasles
У Вас при выводе в консоль "Characters are converted to ANSI before being written."
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
zarius
у вас винда английская? очень похоже что вам нужно в региональные стандарты и установить русский язык для программ, не поддерживающих Юникод.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
zarius,
Попробуйте использовать вместо $l_file
Код:
FileGetShortName('путь к папке' & '\' & $l_file)
 
Автор
Z

zarius

Новичок
Сообщения
8
Репутация
0
inververs
win8Prof64 русская, везде в рег. установках стоит "Русский", в т.ч. для программ, не поддерж. Юникод

madmasles
И ведь была мысль попробовать FileGetShortName, но думаю - не... точно не это...
А нет - ПОМОГЛО! :smile: СПАСИБО!
При этом имена меняются координально, например "СохранениеНастройки" -> "7A13~1", "ФорматЧисла" -> "967C~1" и т.д.
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
zarius
Интересно с чем связана проблема? Сначала я подумал что у тебя проблема в самом obrab_zzz.exe, потому что AutoIt3 передаёт путь как надо, это можно проверить любым другим скомпилированным скрипом, который принимает параметры и выводит их значения. Просто давно на офсайте отписывали аналогичную проблему, я посчитал что это проблема для иностранцев.
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
AZJIO [?]
проблема в самом obrab_zzz.exe, потому что AutoIt3 передаёт путь как надо
Я тоже думаю, что проблема в самой программе. Скорее всего имена файлов юникодовые и программа их не понимает.
 
Верх