我正在使用NodeMCU dev分支的http
模块向Google Calendar API发出GET请求。但是,当我检索事件并解析答案时,由于编码不正确,我会得到奇怪的字符。
我尝试在请求的标头中添加Accept-Charset: utf-8
,但请求失败(代码= -1)。
有没有办法设置charset,或者之后在lua中转换它?
function bdayshttps(curr_date)
if (string.len(curr_date) == 10) then
http.get("https://www.googleapis.com/calendar/v3/calendars/"..
"<CalendarID>/events"..
"?timeMax="..curr_date.."T23%3A59%3A59-00%3A00"..
"&timeMin="..curr_date.."T00%3A00%3A00-00%3A00&fields=items%2Fsummary"..
"&key=<Google Calendar API key>", "Accept-Charset: utf-8", function(code, data)
if (code < 0) then
print("msg:birthdays error")
else
if (code == 200) then
output = ""
for line in data:gmatch"\"summary\": \"[^\n]*" do
output = output..line:sub(13, line:len()-1)..";"
end
print("bday:"..output)
end
end
end)
end
end
出于显而易见的原因,我删除了calendarID和API密钥。
编辑:
此代码的结果返回msg:birthday error
,表示GET请求返回code=-1
。
在标题中替换"Accept-Charset: utf-8"
nil
时,我得到:
Loïc Simonetti
代替Loïc Simonetti
。
答案 0 :(得分:3)
API docs表示您需要将\r\n
附加到您设置的每个标头中。 http.post()
的文档中有一个示例。
因此,您应该设置"Accept-Charset: utf-8"
而不是"Accept-Charset: utf-8\r\n"
。
答案 1 :(得分:1)
对于问题的第二部分(现在响应正常),您似乎收到了有效的UTF8 Unicode。
Loïc
对应于以下UTF8 code units:4C 6F C3 AF 63
Loïc
以通用编码(CodePage 1252)具有以下字节值:4C 6F C3 AF 63
。
所以我的猜测是你用来查看字节的终端或其他设备是错误的,而不是你的请求/响应不正确。根据Per @ Marcel的链接,Lua根本不处理Unicode,所以这是你可以做的最好的事情(安全地接收,存储,然后再发回)