You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:04:59