You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AutoHotkey中Unicode字符存储与使用问题求助

AHK脚本Unicode表情乱码问题解决办法

嘿,我帮你捋捋这个头疼的Unicode乱码问题!这种情况我之前碰过好几次,其实就是AHK对编码的处理细节没搞对,调整几个小地方就能解决啦~

先明确你遇到的核心问题:

  • 把AHK文件保存为带BOM的UTF-8格式后,刚粘贴的Unicode表情显示正常,但重新打开脚本就变成问号和乱码
  • 执行SendInput时,输出的也是问号乱码,不是预期的表情符号

问题根源:

AHK v1默认会用系统的ANSI编码解析脚本,哪怕你把文件存成带BOM的UTF-8,它也可能不认,直接把Unicode字符转成乱码。另外SendInput的原生写法对复杂Unicode字符的兼容性也不太好。

具体解决步骤:

  1. 给脚本加编码声明(最关键!)
    在脚本的第一行(任何代码、注释之前)加上这句代码,告诉AHK要用UTF-8编码读取脚本内容:

    #Encoding UTF-8
    
  2. 确认文件保存格式
    确保编辑器保存时选的是「UTF-8 with BOM」,别选成普通UTF-8(不带BOM)——AHK v1对不带BOM的UTF-8文件识别容易出问题。比如Notepad++保存时,在编码选项里一定要选对。

  3. 优化Unicode字符的发送方式
    直接用SendInput {raw}%变量%对复杂表情的兼容性一般,改用剪贴板中转的方式更稳妥:

    Clipboard := MyVarEmoticonChoices
    SendInput, ^v
    Clipboard := "" ; 清空剪贴板避免干扰其他操作
    
  4. 变量赋值的小优化
    把传统赋值方式=改成表达式赋值:=,对Unicode字符的支持更稳定,比如:

    MyVarEmoticonChoices := "(╯°□°)╯︵ ┻━┻"
    

修改后的完整脚本:

#Encoding UTF-8 ; 必须放在脚本最开头

MyVarEmoticon = (Ltrim
What is your choice? (Enter #):
1. (╯°□°)╯︵ ┻━┻
2. (┛ಠ_ಠ)┛彡┻━┻
3. (╯°Д°)╯︵/(.□ . \\)
4. ┏━┓┏━┓┏━┓ ︵ /(^.^/)
)
InputBox, MyVarEmoticonChoices, Emoticon Choices, %MyVarEmoticon%, , 400, % HEmoticon(MyVarEmoticon),,,,,1

HEmoticon(MyVarEmoticon)
{
    StringReplace, MyVarEmoticon, myvaremoticon, `n, `n, UseErrorLevel
    Lines := ErrorLevel + 1
    height := lines * 30 ; 可以根据自己的需求调整这个数值
    if (Height < 40) ; 防止窗口高度太矮
        Height += 80
    Return height
}

if ErrorLevel {
    ; MsgBox, CANCEL was pressed.
} else {
    if (MyVarEmoticonChoices = "1"){
        MyVarEmoticonChoices := "(╯°□°)╯︵ ┻━┻"
    }
    if (MyVarEmoticonChoices = "2"){
        MyVarEmoticonChoices := "(┛ಠ_ಠ)┛彡┻━┻"
    }
    if (MyVarEmoticonChoices = "3"){
        MyVarEmoticonChoices := "(╯°Д°)╯︵/(.□ . \\)"
    }
    if (MyVarEmoticonChoices = "4"){
        MyVarEmoticonChoices := "┏━┓┏━┓┏━┓ ︵ /(^.^/)"
    }
    WinGetPos, X, Y, Width, Height, ahk_exe ToW.exe
    XWVar := X + 39
    YHVar := Y + 682
    Sleep, 200
    ; 改用剪贴板发送Unicode字符,兼容性更好
    Clipboard := MyVarEmoticonChoices
    SendInput, ^v
    Clipboard := ""
}

按照上面的步骤改完,你再保存重新打开脚本,表情符号应该就能正常显示,SendInput也能正确输出啦~

内容的提问来源于stack exchange,提问作者shadowz1337

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:47:34