首页 > 解决方案 > 已解决如何使用 VBA 将 Excel ASCII 表中未包含的拉丁字符的字符串作为 JSON 发送?

问题描述

我正在开发一个 Excel 宏,允许用户通过 Gmail 发送电子邮件,并将 Excel 数据转换为 PDF 作为附件。为此,我使用了 Eledo PDF 生成器和 Integromat。我正在使用 Integromat Webhook 功能,通过使用 HTTP 请求将直接从 Excel 获取的数据发送给它。总的来说,代码可以正常工作。但是,我无法正确发送特殊字符,尤其是波兰语,即“ą”、“ę”、“ż”、“ź”、“ś”、“ć”、“ł”。据我所知,这些不包含在 Excel 中提供的 ASCII 字符代码中。JSON 已发送,但这些字符被转换为一些不合适的随机字符,例如:“ążóÔ,对应于字母:“ążóò”。我尝试直接从浏览器发出 HTTP 请求并手动插入 JSON 中的值等字符,它们似乎被正确检索,因此,这绝对是 Excel 问题。我尝试将请求标头字符集设置为 UTF-8,用它们的等效字符替换字符串中的这些字母,使用 Integromat 更改编码,但无济于事。我的想法已经用完了,论坛帖子似乎都没有回答我的问题,我只发现了一个关于可能发生的事情的微小线索:

“这些症状表明最初采用 UTF-8 编码的 JSON 字符串是使用 ISO-8859-1 编码写入 HTTP 响应的,并且 Web 浏览器被指示将其显示为 UTF-8。如果它是使用 UTF-8 编写的并显示为 ISO-8859-1,然后你会看到 aériennes。如果它是使用 ISO-8859-1 编写和显示的,那么你会看到 a�riennes。- 我尝试发送“aériennes”这个词,它被检索为“aériennes”。

下面,我附上我的代码。我将永远感激任何建议!

Private Sub CommandButton7_Click()
Dim objHTTP As Object
Dim Mesg As String, Subj As String, URL As String, Json As String, WebhookID As String, HookString As String, Email As String
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
Subj = Range("O125").Value
Mesg = Range("O127").Text
Email = Range("O126").Value

HookString = "Title=" & Range("N13").Value & "&" & "Material=" & Range("S13").Value & "&" & "Adhesive=" & Range("T13").Value & _
"&" & "Dimensions=" & Range("N14").Value & "&" & "Width=" & Range("O14").Value & "&" & "Length=" & Range("P14").Value & "&" & "Colours=" & Range("Q14").Value & _
"&" & "NoC=" & Range("R14").Value & "&" & "Mtype=" & Range("S14").Value & "&" & "Adtype=" & Range("T14").Value & "&" & "NoE=" & Range("N16").Value & _
"&" & "1=" & Range("O16").Value & "&" & "2=" & Range("P16").Value & "&" & "3=" & Range("Q16").Value & "&" & "4=" & Range("R16").Value & "&" & "5=" & Range("S16").Value & _
"&" & "6=" & Range("O17").Value & "&" & "7=" & Range("O18").Value & "&" & "8=" & Range("P18").Value & "&" & "9=" & Range("Q18").Value & "&" & "10=" & Range("R18").Value & "&" & "11=" & Range("S18").Value & _
"&" & "12=" & Range("O19").Value & "&" & "13=" & Range("P19").Value & "&" & "14=" & Range("Q19").Value & "&" & "15=" & Range("R19").Value & "&" & "16=" & Range("S19").Value & _
"&" & "17=" & Range("O20").Value & "&" & "18=" & Range("P20").Value & "&" & "19=" & Range("Q20").Value & "&" & "20=" & Range("R20").Value & "&" & "21=" & Range("S20").Value & _
"&" & "NoEoR=" & Range("N17").Value & "&" & "Value=" & Range("N18").Value & "&" & "Po1000=" & Range("N19").Value & "&" & "PoR=" & Range("N20").Value & "&" & "Photopolymers=" & Range("N22").Value & _
"&" & "NaS=" & Range("N23").Value & "&" & "Date=" & Range("N24").Value & "&" & "piece=" & Range("O22").Value & "&" & "PoPiece=" & Range("P22").Value & "&" & "Diecut=" & Range("R22").Value & _
"&" & "PoD=" & Range("S22").Value & "&" & "Offer=" & Range("O24").Value & "&" & "OfferN=" & Range("P24").Value

WebhookID = "xyzxyzxyzxyzxyzxyzxyzxyz"

URL = "https://hook.integromat.com/" & WebhookID & "?&Subj=" & Subj & "&Mesg=" & Mesg & "&Email=" & Email & "&" & HookString

objHTTP.Open "GET", URL, False
objHTTP.setRequestHeader "Content-type", "application/json"
objHTTP.setRequestHeader "accept-language", "pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7"
objHTTP.setRequestHeader "user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"
objHTTP.send (Json)

End Sub

标签: jsonexcelvbanon-ascii-charactersintegromat

解决方案


推荐阅读