如何在PowerShell中正确使用重定向处理含重音符号的字符
PowerShell重定向保留重音字符解决方案
出现乱码的核心原因是两个环节编码不匹配:一是PowerShell默认解析网页返回内容时未正确识别源站UTF-8编码,二是管道传输、输出文件时的编码设置不一致。可通过以下两种方法解决:
方法1:使用Invoke-WebRequest显式处理编码
PowerShell中默认的curl是Invoke-WebRequest命令的别名,通过显式读取响应字节流并指定编码解析,可从根源避免编码识别错误:
- 执行以下命令获取并输出内容:
# 拉取网页原始响应内容 $webResp = Invoke-WebRequest -Uri "https://www.microsoft.com/fr-ca/" -UseBasicParsing # 用UTF-8解码原始字节流,得到正确的带重音字符的内容 $decodedContent = [System.Text.Encoding]::UTF8.GetString($webResp.RawContentStream.ToArray()) # 输出到文件时指定UTF-8编码 $decodedContent | Out-File -FilePath "test.txt" -Encoding UTF8
- 如果你需要无BOM的UTF-8文件,PowerShell 6及以上版本可将最后一行的编码参数替换为
-Encoding utf8NoBOM。
方法2:显式调用原生curl.exe调整编码
如果习惯使用原生curl工具,可通过修改当前PowerShell会话的控制台输出编码实现正常输出:
- 执行以下命令:
# 临时修改当前会话的控制台输出编码为UTF-8,仅对当前窗口生效 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 # 显式调用curl.exe(避免调用PowerShell别名)并输出到文件 curl.exe "https://www.microsoft.com/fr-ca/" | Out-File -FilePath "test.txt" -Encoding UTF8
以上两种方法都可以正常保留"productivité"这类带重音的特殊字符,不会再出现乱码。
内容的提问来源于stack exchange,提问作者Kinwolf
相关产品推荐
相关产品推荐

