我试图通过Spotify的Web API从Spotify数据库中获取信息。但是,我遇到了重音元音的问题(ä,ö,ü等)。
以Tiësto为例,Spotify的API浏览器可以正确显示信息:https://developer.spotify.com/web-api/console/get-artist/?id=2o5jDhtHVPhrJdv3cEQ99Z
如果使用Invoke-Webrequest
进行API调用,则会得到
蒂什托
作为名称:
function Get-Artist {
param($ArtistID = '2o5jDhtHVPhrJdv3cEQ99Z',
$AccessToken = 'MyAccessToken')
$URI = "https://api.spotify.com/v1/artists/{0}" -f $ArtistID
$JSON = Invoke-WebRequest -Uri $URI -Headers @{"Authorization"= ('Bearer ' + $AccessToken)}
$JSON = $JSON | ConvertFrom-Json
return $JSON
}
如何获得正确的名称?
2条答案
按热度按时间dgenwo3n1#
更新:PowerShell (Core)7.3+现在默认为UTF-8,因为HTTP响应标头中缺少(有效的)
charset
属性,所以不再出现此问题。Jeroen Mostert在对这个问题的评论中很好地解释了这个问题:
问题是Spotify(不明智地)没有返回它在标头中使用的编码。PowerShell遵循标准,假设ISO-8859-1,但不幸的是该网站使用的是UTF-8。(PowerShell应该忽略这里的标准,假设UTF-8,但这只是像,我的意见,伙计。)更多细节here,以及后续票据。
不需要使用临时文件的解决方法:
假设已经定义了函数
ConvertTo-BodyWithEncoding
(见下文),则可以使用以下函数:便利功能
ConvertTo-BodyWithEncoding
:注意事项:
[System.Text.Encoding]
示例、* 代码页编号 *(例如1251
)或编码 name(例如'utf-16le
))。mec1mxoz2#
Jeron Mostert提供的解决方案解决了问题。您必须将其保存在文件中,并明确告诉Powershell它应该使用哪种编码。此解决方案对我很有效,因为我的程序可以花费任何时间(关于读/写IO)