PowerShell调用Google Maps Geocode API地址显示问号乱码问题求助
解决PowerShell调用Google Maps Geocode API的乱码问题
你的乱码问题根源在于Invoke-WebRequest默认错误识别了响应的编码格式。Google返回的JSON是UTF-8编码,但旧版PowerShell(如5.1)会默认用ISO-8859-1解析响应,导致特殊字符(比如ü)变成乱码。后续的编码转换操作已经无法修复,因为字符串在解析阶段就已经损坏了。
直接修改脚本,先确保用UTF-8正确解码响应内容,再转换为JSON对象:
$API = "<That is secret>" $LatLng = "47.5560960732389,7.5917686522" $URL = "https://maps.googleapis.com/maps/api/geocode/json?latlng=$LatLng&key=$API" # 发送请求并获取原始字节流,用UTF-8解码 $response = Invoke-WebRequest -Uri $URL -Method Get -UseBasicParsing $jsonContent = [Text.Encoding]::UTF8.GetString($response.Content) $Result = $jsonContent | ConvertFrom-Json if($Result.status -eq "OK") { $Result.results.formatted_address Write-Host "------------------------------------" $Result.results.formatted_address[0] }
关键说明:
- 跳过
Invoke-WebRequest自带的内容解析,直接拿原始字节$response.Content,用UTF-8解码成字符串后再传给ConvertFrom-Json,从根源避免编码错误。 - 不需要额外的编码转换操作,因为字符串已经是正确的UTF-8格式了。
如果使用PowerShell 7+,这个问题会自动解决,因为PS7默认用UTF-8处理HTTP响应。但在PS5.1及更早版本中,必须手动指定编码解码步骤。
内容的提问来源于stack exchange,提问作者TheStingPilot
相关产品推荐
相关产品推荐

