1 (изменено: Clannad5, 2021-05-18 20:36:29)

Тема: AHK: Символы ??? при компиляции в ANSI

Проблема очень ужасная, которая испортила мне все ожидания.
Дело в том, что есть AHK Protector, который написан на ANSI компиляторе:
https://www.blast.hk/threads/22092/

При компиляции моего скрипта, этот массив:

SpaceArray := ["ࢅ","ࢄ","ࢃ","ࢂ"]

Превращается вот в это:

SpaceArray := ["?","?","?","?"]

То есть, нужные символы отображаются просто знаком вопроса.
Можно ли как-то обойти это ограничение?
К примеру как-то загружать символы с файла в переменную или что-то типа того?

пример, который на ANSII будет со знаками вопроса.


SpaceArray := ["࢟","࢝","࢛","࢚","࢘","ࢗ","࢖","࢕","࢔","࢓","࢒","࢑","࢐","࢏","ࢍ","ࢌ","ࢋ","ࢊ","ࢉ","࢈","ࢇ","ࢆ","ࢅ","ࢄ","ࢃ","ࢂ","ࢁ","ࢀ","ࡿ","ࡾ","ࡽ","ࡼ","ࡻ","ࡺ","ࡹ","ࡸ","ࡷ","ࡶ","ࡴ","ࡱ","ࡰ"]
Loop, 40
{
MsgBox, % SpaceArray[A_Index]
}
Return

2

Re: AHK: Символы ??? при компиляции в ANSI

А что с заголовком?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Символы ??? при компиляции в ANSI

teadrinker
Сайт почему-то стал запоминать последнею введённую строку в название, при редактирование.
Исправил.

4

Re: AHK: Символы ??? при компиляции в ANSI

Да, появился такой баг, надо поправить.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Символы ??? при компиляции в ANSI

Я даже не уверен, что правильно вижу в браузере символы, которые нужны. У меня отображается так:
 
 https://i.imgur.com/FhgMB0T.png
 
Так и должно быть?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Символы ??? при компиляции в ANSI

teadrinker

Да, эти символы без графических знаков.
Они такими и должны быть.
AHK с Unicode их будет понимать как что-то типа [] - квадратного символа.
AHK с ANSI их переводит в знак вопроса.

Мне нужно решить эту проблему, т.к AHK Protector существует только на сборке ANSI, а у меня есть символы, с которыми ANSI не может работать, в данном случае.

Мне нужно чтобы эти символы можно было загружать в переменную, в массив, а так же обратно в .txt файл через Fileappend.
Пока думал только над тем, чтобы создать второй скрипт, который бы как-то принимал и обрабатывал эти данные отдельно, но хотелось бы этого избежать.

7

Re: AHK: Символы ??? при компиляции в ANSI

Можно использовать код символов вместо самих символов:

MsgBox, % Chr(2181)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8 (изменено: Clannad5, 2021-05-18 21:28:52)

Re: AHK: Символы ??? при компиляции в ANSI

teadrinker

При компиляции данного способа в ANSI, в Msgbox - пустая строка.

Если не компилировать, то символ видно.
Если вариант запуска .ahk ставить на сборку ANSI - символа не видно.

9

Re: AHK: Символы ??? при компиляции в ANSI

Так вы же сказали, вам нужно в файл записывать, зачем вам MsgBox?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Символы ??? при компиляции в ANSI

teadrinker
В файл так же записывается пустая строка.
Записываю так:

File := % Chr(2181)
FileAppEnd,
(
%File%
), t.txt

Может я как-то неправильно записываю?

11

Re: AHK: Символы ??? при компиляции в ANSI

Знак процента лишний.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Символы ??? при компиляции в ANSI

teadrinker
Убранный процент ничего не решил c:

Нашел такой метод:


file := FileOpen("t.txt", "a")
file.WriteChar(2181)
file.Close()

Но он почему-то оставляет символ в виде трёх точек.

13

Re: AHK: Символы ??? при компиляции в ANSI

Вот так попробуйте:

SpaceArray := [2181, 2181, 2181, 2181]
VarSetCapacity(str, len := SpaceArray.Count()*2, 0)
for k, v in SpaceArray
   NumPut(v, str, (A_Index - 1)*2, "UShort")

FileAppendBinary(A_Desktop . "\test.txt", &str, len, "UTF-16")

FileAppendBinary(filePath, pData, dataSize, encoding) {
   File := FileOpen(filePath, "rw", encoding)
   File.Pos := File.Length
   File.RawWrite(pData + 0, dataSize)
   File.Close()
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: Символы ??? при компиляции в ANSI

Файл, если уже существует, должен быть в кодировке UTF-16.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Символы ??? при компиляции в ANSI

teadrinker

Так действительно получилось.
А как этот метод применить к регулярным выражениям?
К примеру я хочу, чтобы вначале строки появился один из этих символов.
В простом варианте я бы написал:

Text := RegExReplace(Text, "^", "ࢄ")

А с вашим способом это как-то можно провернуть?
И еще, как добавить эти символы в Edit элемент из GUI?
К примеру загрузив эти символы из .txt файла.

16

Re: AHK: Символы ??? при компиляции в ANSI

C RegExReplace в ANSI никак наверно, нужно работать с бинарными данными. В Edit так можно:

File := FileOpen("C:\Users\User\Desktop\test.txt", "r", "UTF-16")
VarSetCapacity(buff, File.Length + 2, 0)
File.RawRead(buff, File.Length)
File.Close()

Gui, Add, Edit, hwndhEdit w200
DllCall("SendMessageW", "Ptr", hEdit, "UInt", EM_REPLACESEL := 0xC2, "Ptr", 0, "Ptr", &buff)
Gui, Show
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: Символы ??? при компиляции в ANSI

teadrinker
Тогда RegExReplace буду уже использовать вызовом второго скрипта.
Буду с этим разбираться как и что работает.
Спасибо за примеры <3

18

Re: AHK: Символы ??? при компиляции в ANSI

В FileAppendBinary можно опцию "a" использовать:

FileAppendBinary(filePath, pData, dataSize, encoding) {
   File := FileOpen(filePath, "a", encoding)
   File.RawWrite(pData + 0, dataSize)
   File.Close()
}

или

FileAppendBinary(filePath, pData, dataSize, encoding) {
   Return FileOpen(filePath, "a", encoding).RawWrite(pData + 0, dataSize)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder