【问题标题】:Making a UTF-8 call from VBA从 VBA 进行 UTF-8 调用
【发布时间】:2018-05-04 20:07:53
【问题描述】:

我正在尝试调用 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() 等其他解决方案也将 + 和 , 转换为以 % 开头的值,从而造成了更多混乱。

【问题讨论】:

  • 如果只需要在工作簿数据刷新时使用webservice,可以考虑使用Power Query
  • 嗨,汤姆,感谢您的提示。我有一堆想要地理编码的个人地址。据我了解,Powerquery 不适用于这种情况。
  • 您可以提出不同的问题。但简而言之,您可以轻松地在表格、列表和结构化文本(包括 JSON 和 XML)之间进行转换。菜单和对话框可以插入或编辑转换步骤,或者您可以自己编写全部或部分代码。

标签: vba utf-8


【解决方案1】:

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

 Set httpObject = CreateObject("MSXML2.XMLHTTP")

用这个:

Set httpObject = CreateObject("MSXML2.ServerXMLHTTP")

【讨论】:

  • 谢谢!我尝试了一些代码来转换 URL 本身,但这个解决方案确实是最简单的一个,并且像一个魅力一样工作
【解决方案2】:

强制 MSXML2 为 utf-8 不是正确的方法。所有浏览器在发送请求之前都会转换为 ASCII。最简单的查看方法是在浏览器开发工具中的网络选项卡中。 Chrome 会将您的网址翻译成

https://nominatim.openstreetmap.org/search?amenity=charging_station&format=json&q=Elly-Beinhorn-Ring+2,12529+Sch%C3%B6nefeld

因此,简单的方法是以类似的方式将 ö 编码为 %C3%B6(如此处所述:https://www.fileformat.info/info/unicode/char/00f6/index.htm)和其他字符。有很多可用的编码方法。看看

【讨论】:

  • 嗨,Sam,感谢您的回答,但您部分正确。 Firefox 不会转换为 ASCII,Edge 可能会转换,但实际上无法在开发者控制台中显示它的作用(我猜这几乎总结了整个问题)。
猜你喜欢
  • 2017-04-17
  • 2016-10-06
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 2018-09-23
  • 2014-07-02
相关资源
最近更新 更多