首页 > 解决方案 > 从 VBA 进行 UTF-8 调用

问题描述

我正在尝试调用 openstreetmap (特别是https://nominatim.openstreetmap.org/search?amenity=charging_station&format=json&q=Elly-Beinhorn-Ring+2,12529+Schönefeld )并且从任何网络浏览器都可以正常工作。通过 Excel VBA 调用时抱怨字符串不是 UTF-8。我还没有使用过提琴手,但对我来说很明显 srequest 应该是 UTF-8 格式。我找到了另一种将 url 转换为 ascii 的解决方案,但我更喜欢在 utf-8 中使用它,这是一些会产生错误的示例代码:

 Dim httpObject As Object
 Set httpObject = CreateObject("MSXML2.XMLHTTP")
 srequest = "https://nominatim.openstreetmap.org/search?amenity=charging_station&format=json&q=Elly-Beinhorn-Ring+2,12529+Schönefeld"
 httpObject.Open "GET", srequest, False
 httpObject.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
 httpObject.send
 sgetResult = httpObject.responsetext

 Debug.Print sgetResult

如果有人可以帮助如何强制 MSXML2 进行 utf-8 调用,我会很高兴。目前我的解决方案是将德语变音符号 (ä,ü,ö) 替换为 (ae,ue,oe) ,这有效但不是我想要的。URLEncode() 等其他解决方案也通过将 + 和 , 转换为以 % 开头的值来制造更多混乱。

标签: vbautf-8

解决方案


我可以通过替换这一行来解决我的问题:

 Set httpObject = CreateObject("MSXML2.XMLHTTP")

有了这个:

Set httpObject = CreateObject("MSXML2.ServerXMLHTTP")

推荐阅读