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

为何Select-Object无法正确显示Unicode字符?PowerShell Git场景

Git标签Unicode字符经Select-Object后显示乱码的原因及解决

现象说明

在PowerShell 7.5.0-rc.1环境中:

  • 单独执行git tag -l,Unicode字符显示正常:
    Cấutrúc2.5.0
    
  • 单独执行git tag -n,同样能正确显示含Unicode的标签信息:
    Cấutrúc2.5.0    struct: trong ❝📐 Dự án❞ thêm ❝Tạo thu nhập thụ động❞ và ❝Tự động hoá❞
    
  • 但通过管道把git输出传给Select-Object(用别名select)时,比如执行git tag -n --sort=-creatordate | select -first 1,Unicode字符就会乱码:
    Cß║Ñutr├║c2.5.0    struct: trong Γ¥¥≡ƒôÉ Dß╗▒ ├ínΓ¥₧ th├¬m Γ¥¥Tß║ío thu nhß║¡p thß╗Ñ ─æß╗ÖngΓ¥₧ v├á Γ¥¥Tß╗▒ ─æß╗Öng ho├ííΓ¥₧
    

根本原因

问题出在管道传输时的编码解析不匹配:

  1. Windows环境下,Git默认使用OEM编码(比如CP437)输出内容,而PowerShell 7.x的控制台默认用UTF-8显示内容。
  2. 直接执行git命令时,控制台会自动把Git输出的OEM编码转换为UTF-8,所以显示正常。
  3. 一旦通过管道传递输出,PowerShell会直接读取Git输出的字节流,但错误地用UTF-8去解析原本是OEM编码的字节,导致Unicode字符被破坏,出现乱码。

解决办法

强制让Git输出UTF-8编码的内容即可:

  • 临时生效:先执行$env:GIT_OUTPUT_ENCODING = 'utf-8',再运行带管道的命令。
  • 永久生效:把$env:GIT_OUTPUT_ENCODING = 'utf-8'添加到PowerShell的配置文件(比如$PROFILE)里,每次启动PowerShell都会自动应用这个设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:21:06