想在capslock+的软件上增加一个新的功能,自己仿造里面的翻译功能写了一点,基本能运行了,但是有一个编码的问题一直解决不了,来问问各位专家。
具体的代码如下,我是外行人,完全是靠GPT,内容比较乱见谅。
#Include ../lib/lib_json.ahk ;引入json解析文件
keyFunc_OpenAI(){
;指定文件编码
#Persistent
FileEncoding, UTF-8
;确认function调用成功
msgbox, "OpenAI 启动成功"
; 设置OpenAI API密钥
;OpenAI_key := "YOUR_OpenAI_key"
; 定义基础URL地址变量
;base_url := "https://api.openai.com/"
; 定义模型变量
;model := "gpt-4o-mini"
; 定义temperature和top_p参数
;temperature := 0.7
;top_p := 0.9
global OpenAI_key, base_url, model, temperature, top_p
OpenAI_key:=CLSets.TTranslate.OpenAI_key
base_url:=CLSets.TTranslate.base_url
model:=CLSets.TTranslate.model
temperature:=CLSets.TTranslate.temperature
top_p:=CLSets.TTranslate.top_p
;确认变量
MsgBox, [ %OpenAI_key%, %base_url%, %model%, %temperature%, %top_p% ]
; 快捷键:Ctrl+Shift+O
;^+o::
; 获取光标左侧的文本
clipboard:="" ;将剪贴板清空
MsgBox, %clipboard% ;确认剪贴板内容清空
SendInput, ^+{Up}
Sendinput, ^{c}
ClipWait, 1
prompt := clipboard
if (A_IsUnicode) {
; 如果 AutoHotkey 运行在 Unicode 模式下,直接使用剪贴板内容
utf8Prompt := clipboard
} else {
; 如果运行在 ANSI 模式下,将剪贴板内容转换为 UTF-8 编码
utf8Prompt := ConvertToUTF8(clipboard)
}
MsgBox, %utf8Prompt%
msgbox, %prompt%
utf8Prompt := %utf8Prompt%
;创建一个空对象
data := {}
; 设置请求数据
data["model"] := model
data["messages"] := [{"role": "user","content": utf8Prompt}] ;主要的prompt内容,中文会出现乱码?!
;data["temperature"] := temperature
;data["top_p"] := top_p
; 将data数据转换为JSON格式
json_data := JSON.Dump(data)
msgbox, %json_data% ;确认data数据是否正确
; 构建请求头
http := ComObjCreate("WinHttp.WinHttpRequest.5.1")
post_url := base_url . "v1/chat/completions"
http.Open("POST", post_url)
http.SetRequestHeader("Content-Type", "application/json")
http.SetRequestHeader("Authorization", "Bearer " . OpenAI_key)
http.Send(json_data)
; 获取响应
response := http.ResponseText
; 使用 JSON.Load 解析响应 (移除 .Text)
responseObject := JSON.Load(response)
; 获取助手消息内容
result := responseObject.choices[1].message.content
; 显示结果
MsgBox, %result%
clipboard := result ;将result数据复制到剪贴板
return result
}
ConvertToUTF8(str) {
VarSetCapacity(utf8Str, StrPut(str, "CP0") * 2)
StrPut(str, &utf8Str, "CP0")
return StrGet(&utf8Str, "UTF-8")
}
以上代码, data["messages"] := [{"role": "user","content": utf8Prompt}]
,这一行以及
json_data := JSON.Dump(data)
msgbox, %json_data% ;确认data数据是否正确
上面两行,只要复制的是中文,就不行,传出去的token都是乱码的。
实在是搞不好,只能来这里求助了。
想问问各位,有没有办法处理这个问题啊,GPT4o Gemini都没有能解决这个问题。