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

PowerShell5 Import-Module加载特殊字符乱码 PS7无异常问题咨询

根本原因

该乱码问题的核心诱因是PowerShell 5与PowerShell 7对无BOM脚本文件的默认读取编码规则不兼容,具体触发逻辑:

  • 模块内使用的点源导入逻辑. $import.fullname,本质是让PowerShell直接从磁盘读取目标路径的.ps1脚本文件后执行,完全走PowerShell内置的默认文件编码解析流程。
  • 模块Public、Private目录下的函数脚本文件未添加对应编码的BOM标记,多数场景下是保存为了无BOM的UTF-8格式。
  • PowerShell 5读取无BOM脚本时,不会默认使用UTF-8解析,而是调用系统当前区域设置对应的ANSI编码(英文系统默认是Windows-1252,简体中文系统默认是GBK)解码文件内容。
    你观测到的乱码正是UTF-8 BOM的字节序列0xEF 0xBB 0xBF被强制按Windows-1252编码解码的结果;乱码ÿþ是UTF-16 LE BOM的字节序列0xFF 0xFE被按Windows-1252解码的结果。
  • PowerShell 7统一了跨平台编码逻辑,所有无BOM脚本默认按UTF-8编码解析,和现代代码编辑器的默认保存规则对齐,因此不会复现该乱码问题。
手动F8加载无乱码的原因

在编辑器中全选代码按F8执行时,代码不会走「从磁盘读取文件→按默认编码解码」的流程:编辑器本身已经正确识别了脚本文件的编码,传入PowerShell运行空间的是已经解码完成的正确字符串,因此BOM字符可以正常显示为(UTF-8 BOM)和ÿþ(UTF-16 LE BOM)。

兼容修复方案
  • 若需要同时兼容PowerShell 5和PowerShell 7,将模块内所有.ps1脚本文件统一保存为带UTF-8 BOM的格式即可,两个版本的PowerShell都能正确识别该编码,不会出现解析乱码。
  • 若仅需适配PowerShell 7及以上版本,直接保存为无BOM的UTF-8格式即可正常运行。
  • 在PowerShell 5环境下不要依赖默认编码读取含非ASCII字符的无BOM文件,所有含特殊字符的脚本都需要添加对应编码的BOM标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:57:23