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

PowerShell已设UTF-8仍输出乱码:项目符号显示异常

解决PowerShell 5.1中项目符号•显示为•的乱码问题

问题根源

你看到的•是UTF-8编码的项目符号•(Unicode U+2022)被错误以Windows-1252编码解码的结果。PowerShell 5.1对UTF-8的支持存在局限性,仅设置$OutputEncoding和[Console]::OutputEncoding无法覆盖所有场景。

分步解决方案

1. 切换控制台代码页为UTF-8

控制台默认代码页(如GBK、Windows-1252)会导致UTF-8字符显示乱码,需手动切换:

chcp 65001 | Out-Null

若要永久生效,将上述命令添加到PowerShell配置文件中:

# 打开配置文件
notepad $PROFILE
# 添加一行:chcp 65001 | Out-Null

2. 避免脚本编码导致的字符解析错误

PowerShell 5.1默认仅识别带BOM的UTF-8脚本文件,若脚本是无BOM的UTF-8,直接写入的•会被错误解析。两种解决方式:

  • 保存脚本时选择「UTF-8 with BOM」编码;
  • 用Unicode转义序列生成项目符号,彻底规避编码问题:
    # 生成单个项目符号
    $bullet = [char]0x2022
    # 生成多个项目符号
    $bullets = -join ($bullet * 3)
    

3. 写入CSV文件的正确编码处理

即使指定-Encoding UTF8,PowerShell 5.1的Export-Csv有时仍会出现编码偏差,建议用.NET类直接写入:

$version = 3
$fullname = "Paul"
$result = "$fullname " + (-join ([char]0x2022 * $version))
# 写入UTF-8无BOM文件
[System.IO.File]::WriteAllText("output.csv", $result, [System.Text.Encoding]::UTF8)
# 若需要带BOM的UTF-8,直接使用上述命令即可(.NET的UTF8默认带BOM)

4. Visual Studio中运行的适配

确保VS输出窗口编码设置为UTF-8,同时在脚本开头添加chcp 65001 | Out-Null,并使用Unicode转义生成项目符号。

示例代码

chcp 65001 | Out-Null

$version = 3
$fullname = "Paul"
$bulletString = -join ([char]0x2022 * $version)
$result = "$fullname $bulletString"

# 控制台输出
Write-Host $result
# 写入文件
[System.IO.File]::WriteAllText("output.csv", $result, [System.Text.Encoding]::UTF8)

内容的提问来源于stack exchange,提问作者Paul Williams

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:02:44