Что нового

Кодировка текста переменной при передаче во внешнюю программу

nhlstar

Новичок
Сообщения
8
Репутация
0
Доброго времени суток!
Есть программа-генератор ключевых слов keywords из текста, зовется SP-meta, можно скачать тут: razkrutka.ucoz.ru/load/0-0-0-2-20 (извиняюсь, внешние ссылки оставлять не могу). Пытаюсь передать в интерфейс sp-meta содержимое переменной $Text посредством буфера обмена, полученной при чтении текстового файла. Но при вставке текста русские символы выглядят знаками вопроса ?? ? ?? Текст скрипта примерно таков:
Код:
$rwFile = FileOpen("1.txt",260)
FileWrite($rwFile,"содержимое файла")

Run(@ScriptDir & "\sp_meta.exe")
$SpMetaWindow = WinWaitActive("[CLASS:Tfm_meta]")

$rFile = FileOpen("1.txt",0)
$Text = FileRead($rFile)

ClipPut($Text)

SpMetaCreateTags()

Func SpMetaCreateTags()
WinActivate($SpMetaWindow)
ControlClick($SpMetaWindow, "", '[CLASS:TGroupBox; INSTANCE:3]',"main",1,53, 52); клик по кнопке "Вставить"
Sleep(1000)
ControlClick($SpMetaWindow, "", '[CLASS:TGroupBox; INSTANCE:3]',"main",1,49, 30); клик по кнопке "Создать"
Sleep(1000)
ControlClick($SpMetaWindow, "", '[CLASS:TGroupBox; INSTANCE:2]',"main",1,46, 31) ;клик по кнопке "В буфер"
Sleep(1000)
ControlClick($SpMetaWindow, "", '[CLASS:TGroupBox; INSTANCE:3]',"main",1,59, 70) ;клик по кнопке "Очистить"
Sleep(1000)
Global $KeyWords = ClipGet()
EndFunc

С кодировками у меня не оч хорошо) Пытался и создать исходный текстовый файл в кодировке UTF-8 посредством флагов 130 и 260 функции FileOpen , не помогает, думал вдруг поможет, ибо при создании текстового файла исходный флаг был 2, прочитал что по умолчанию идет ANSI, пытался использовать функции библиотеки Encoding UDF, ничего не помогает. Ай нид хелп, направьте в нужное русло :stars:
P.S. Если переданное в буфер значение переменной $Text вручную вставить в word или в адресную строку хрома, затем его заново скопировать и вставить в sp-meta, проблемы с кодировкой исчезают, но не хочется колхозить скрипт лишними действиями...
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
nhlstar
Это не проблема кодировки файла - это проблема кодировки у старых версий Delphi. Кстати, если выбрана НЕ русская раскладка клавиатуры, то после нажатия кнопки "В буфер", в буфере обмена тоже будет неверная кодировка для русских символов.

В данном случае можно работать напрямую с элементами Memo
Код:
$SpMetaWindow = WinWait("[CLASS:Tfm_meta]")

MsgBox(0, "", SpMetaCreateTags("содержимое файла"))
MsgBox(0, "", SpMetaCreateTags("другое содержимое файла"))
MsgBox(0, "", SpMetaCreateTags("содержимое другого файла"))

Func SpMetaCreateTags($Text)
  ControlSetText($SpMetaWindow, "", "TMemo3", $Text) ; вставка текста
  ControlClick($SpMetaWindow, "", "TGroupBox3", "main", 1, 50, 30) ; клик по кнопке "Создать"
  Return ControlGetText($SpMetaWindow, "", "TMemo2") ; чтение текста
EndFunc
 
Автор
nhlstar

nhlstar

Новичок
Сообщения
8
Репутация
0
Спасибо :smile:, опять на грабли наступил с раскладкой по умолчанию, сначала голову ломал почему в send ctrl+v не работает, все решилось использованием shift+insert. Раскладка англ. по умолчанию стоит...
 
Верх