1

我正在使用httpNodeMCU 开发分支的模块向 Google Calendar API 发出 GET 请求。但是,当我检索事件并解析答案时,由于编码不正确,我得到了奇怪的字符。

我试图添加Accept-Charset: utf-8请求的标头,但请求失败(代码=-1)。

有没有办法设置字符集,或者之后在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"by时,我得到:nil

Loïc Simonetti而不是Loïc Simonetti.

4

2 回答 2

3

API 文档说您需要附加到您设置的\r\n每个标头。文档中有一个示例http.post()

因此,"Accept-Charset: utf-8"您应该设置"Accept-Charset: utf-8\r\n".

于 2016-03-19T21:46:48.947 回答
1

对于您问题的第二部分(现在响应正在运行),您似乎收到了有效的 UTF8 Unicode。

Loïc对应于以下UTF8 代码单元4C 6F C3 AF 63

Loïc在通用编码 ( CodePage 1252 )中具有以下字节值:4C 6F C3 AF 63.

所以我的猜测是您用来查看字节的终端或其他设备正在破坏事物,而不是您的请求/响应不正确。根据上面@Marcel 的链接,Lua 根本不处理 Unicode,所以这是你能做的最好的事情(安全地接收、存储,然后稍后再发回)

于 2016-03-22T02:52:16.453 回答