欧洲区域环境下PowerShell字符串转UTF-8:处理Access读出的德语Stück
问题原因
你的编码转换逻辑方向错误。PowerShell 中所有原生字符串对象默认是UTF-16LE编码,不管是从Access数据库读取的Stück还是在ISE中直接输入的常量,都是标准的UTF-16格式字符串。你之前的操作是将UTF-16字符串按Windows-1252编码转成字节数组,再强行用UTF-8规则解码,自然会出现乱码。
正确实现代码
如果你需要得到你期望的Stück输出,只需要把编码转换的方向反过来即可:
# 原始输入字符串,和你从数据库拿到的内容一致 $Text1 = "Stück" # 先将UTF-16字符串编码为UTF-8字节数组 $utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($Text1) # 再将UTF-8字节数组按Windows-1252编码解码为字符串 $targetText = [System.Text.Encoding]::GetEncoding(1252).GetString($utf8Bytes) # 输出结果为 Stück $targetText
实际REST调用场景优化
如果你的最终目的是发起REST请求时传输UTF-8编码的内容,其实不需要手动做上述字符串转换,更稳妥的方案是直接传递UTF-8编码的字节数组给REST请求命令,避免中间字符串转码出现异常:
# 构造请求内容 $reqBody = @{ itemName = "Stück" } | ConvertTo-Json # 直接将请求内容转成UTF-8字节数组 $utf8Body = [System.Text.Encoding]::UTF8.GetBytes($reqBody) # 调用接口时指定charset=utf-8 Invoke-RestMethod -Uri "你的接口地址" -Method Post -Body $utf8Body -ContentType "application/json; charset=utf-8"
内容的提问来源于stack exchange,提问作者OliverLx
相关产品推荐
相关产品推荐

