如何在AutoHotKey中使用Unicode?

Eam*_*ney 23 autohotkey

我试图让两个连字符触发短划线,三个连字符触发长划线; 喜欢

:*?:---=::—
:*?:--=::–
Run Code Online (Sandbox Code Playgroud)

除了工作.这是我得到的地方:

:*?:11::

SendLevel 1

Send 2 

return



SendLevel 0

:*?:21::3 
Run Code Online (Sandbox Code Playgroud)

这项工作(11产生2,111产3)

:*?:--::

SendLevel 1

Send –

return



SendLevel 0

:*?:–-::—
Run Code Online (Sandbox Code Playgroud)

这是相同的脚本,但"1"已被" - "取代,"2"已被" - "取代,"3"已被" - "替换为" - "应生成" - "并且"---"应该生成" - ",但它不起作用,因为在我使用的版本中不完全支持Unicode(来自autohotkey.com的AutoHotKey_L v1.1.09.04).

lag*_*lex 41

.ahk文本文件需要使用UTF8-BOM编码而不是UTF8保存

正如本评论所指出的,发布作为更多可见性的答案.

  • Notepad++ 中的@StevenVascellaro 打开标有“编码”的菜单,然后选择所需的编码选项。 (3认同)
  • 最好的答案,从我的角度来看。此外,这是设计使然。证明引用 ([source](https://www.autohotkey.com/docs/AHKL_ChangeLog.htm#v1.1.08.00)):“将默认脚本代码页更改为 ANSI,因为以前的行为是混淆。UTF-8 文件现在必须有一个字节顺序标记 (BOM) 才能被正确识别。” (2认同)

Seb*_*sen 6

单击Save as,更改编码方案,如下所示:

在此输入图像描述


Joh*_*mse 1

我从AutoHotKey 论坛复制了以下代码:

\n\n
;IMPORTANT, you must save this script as UTF-8 to make it work.\n\n::!?::\n::?!::\nPutUni("\xe2\x80\xbd")\nReturn\n\n::neko::\nPutUni("\xe7\x8c\xab")\nReturn\n\n:?:damn::\nPutUni("\xe2\x9c\xa9\xe2\x98\xa0#\xe2\x80\xbc")\nReturn\n\n;Paste UTF8 string (Hex encoded or not) as unicode.\n;If you don\'t use Hex encoding, you must save your script as UTF8\nPutUni(DataIn)\n{\n    SavedClip := ClipBoardAll\n    ClipBoard =\n    If RegExMatch(DataIn, "^[0-9a-fA-F]+$")\n    {\n        Loop % StrLen(DataIn) / 2\n        UTF8Code .= Chr("0x" . SubStr(DataIn, A_Index * 2 - 1, 2))\n    }\n    Else\n        UTF8Code := DataIn\n\n    Transform, ClipBoard, Unicode, %UTF8Code%\n    Send ^v\n    Sleep 100 ;Generous, less wait or none will often work.\n    ClipBoard := SavedClip\n    Return\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这PutUni函数会将所需的输入“翻译”为所需的 Unicode 输出。

\n

  • 我刚刚使用了“Send”命令,但只有在将编码从 UTF8 更改为 UTF8+BOM 后它才起作用。 (8认同)