已解决如何使用 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 响应,并指示网络浏览器将其显示为 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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)