Microsoft Graph创建含重音字符用户时的编码问题
解决Microsoft Graph创建用户时重音字符乱码问题
问题核心答案
向/v1.0/users发送的POST请求体必须使用UTF-8编码,这是JSON的标准编码要求,也是Microsoft Graph明确支持的编码格式。
问题分析
你编写的Encode函数是无效的——它只是将字符串按UTF-8转成字节再转回字符串,没有任何实际编码修正作用。问题根源在于Invoke-RestMethod默认会使用系统编码(如Windows-1252)发送字符串格式的请求体,而非UTF-8,最终导致重音字符被错误解析。
解决方案
1. 移除无效的Encode函数
直接删除这个无意义的编码循环转换函数。
2. 修改Invoke-GraphPost函数,确保UTF-8编码发送请求体
修改后的函数会将JSON字符串转换为UTF-8字节数组,配合明确的Content-Type头,确保Microsoft Graph正确解析字符:
function Invoke-GraphPost { [cmdletbinding()] Param( [parameter(Mandatory = $true)][string]$API, [parameter(Mandatory = $true)][string]$AccessToken, [parameter(Mandatory = $true)]$body, [parameter(Mandatory = $false)][string]$Apiversion = "v1.0" ) $header = @{ Authorization = ("Bearer {0}" -f $AccessToken) 'Content-Type' = 'application/json; charset=utf-8' } # 将对象转换为JSON字符串 $bodyjson = ConvertTo-Json -InputObject $body -Compress # 转换为UTF-8字节数组,确保请求体编码正确 $utf8Body = [System.Text.Encoding]::UTF8.GetBytes($bodyjson) $URI = "https://graph.microsoft.com/{0}/{1}" -f $Apiversion, $API try { $result = Invoke-RestMethod -Uri $URI -Method Post -Body $utf8Body -Headers $header } catch { $FailMessage = "Unable to create graph POST request {0} with body {1}" -f $URI, $bodyjson $module.failjson($FailMessage) } return $result }
3. 额外检查
确认数据源User.Roepnaam和User.Volledige_achternaam本身是正确的Unicode字符串,没有提前被错误编码(比如从非UTF-8的文件读取时未指定编码)。如果数据源本身已乱码,需要先修正读取数据时的编码设置。
内容的提问来源于stack exchange,提问作者Haruka Shitou
相关产品推荐
相关产品推荐

