Making a UTF-8 call from VBA

落花浮王杯 提交于 2021-02-11 13:23:29

问题


I'm trying to make calls to openstreetmap (specifically to https://nominatim.openstreetmap.org/search?amenity=charging_station&format=json&q=Elly-Beinhorn-Ring+2,12529+Schönefeld ) and from any webbrowser it works fine. When calling via Excel VBA is complains that the string is not UTF-8. I haven't used fiddler yet but to me it is clear that srequest should be in UTF-8 format. I found another solution to convert the url to ascii but I'd prefer to have it in utf-8 here's some sample code which creates the error:

 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

If anybody can help how to force MSXML2 to make an utf-8 call, i'd be happy. at the moment my solution is to replace German Umlauts (ä,ü,ö) with (ae,ue,oe) which works but is not what I want. Other solutions like URLEncode() have created more chaos by also converting + and , to values starting with %.


回答1:


I could solve my problem by replacing this line:

 Set httpObject = CreateObject("MSXML2.XMLHTTP")

with this one:

Set httpObject = CreateObject("MSXML2.ServerXMLHTTP")



回答2:


Forcing MSXML2 to utf-8 is not the right way to go. All browsers convert to ASCII before sending the request. Easiest way to see this is in the Network tab in your browser Dev tools. Chrome translates your URL to

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

So the easy way is to encode ö to %C3%B6 (as described here: https://www.fileformat.info/info/unicode/char/00f6/index.htm) and the other characters in a similar way. There are a lot of encoding methods available out there. Have a look



来源:https://stackoverflow.com/questions/50182394/making-a-utf-8-call-from-vba

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!