← 返回
未分类

Pwsh Encoding Fix

Fix PowerShell file encoding corruption (backtick, dollar sign, Chinese char mangling) when writing Node.js files on Windows.
修复在 Windows 上使用PowerShell 写入 Node.js 文件时的编码损坏问题(反引号、美元符号、中文乱码)
jeremycooper2077 jeremycooper2077 来源
未分类 clawhub v1.0.0 1 版本 100000 Key: 无需
★ 0
Stars
📥 182
下载
💾 0
安装
1
版本
#latest

概述

PowerShell 文件编码修复

在 Windows PowerShell 中写入含特殊字符的 Node.js/JS 文件时,PowerShell 会破坏文件内容。此 Skill 提供诊断和修复方法。

现象

问题表现原因
------------------
反引号被吞模板字符串 ` hello ${name} "hello ${name}"`PowerShell 把 ` `` 当转义符
$ 变量被展开${var} 变空字符串PowerShell 展开 $var 变量
中文变乱码汉字变垃圾字符(如 已查到UTF-8 被 GBK 重编码
文件体积暴增13KB → 20MB乱码字符被反复替换

根本原因

PowerShell 管道命令会修改文件编码:

# ❌ 这些命令会破坏文件:
Set-Content file.js "content"         # 吞反引号
Out-File file.js                       # 吞反引号
Get-Content | Set-Content             # 管道 → 重编码
Write-Output "`$var" > file.js        # 展开 $ 变量

使用诊断修复工具

本 Skill 附带一个可执行脚本 pwsh-encoding-fix.js,可以在任何有 Node.js 的 Windows 机器上运行:

# 诊断文件编码问题
node pwsh-encoding-fix.js <文件路径>

# 诊断并自动修复(仅 GBK 乱码可自动修复)
node pwsh-encoding-fix.js <文件路径> --fix

工具的诊断能力

严重度检测类型说明
------------------------
!! CRITICALBACKTICK_LOST模板字符串反引号被 PowerShell 吞掉
!! CRITICALDOLLAR_EXPANDED${var} 变量被展开为空
!! CRITICALGBK_CORRUPT中文 UTF-8 被 GBK 重编码损坏(可自动修复)
!! CRITICALSYNTAX_ERRORJS 语法检查失败,可能是编码损坏导致
WW WARNINGBACKTICK_PARTIAL部分模板可能受损
WW WARNINGGBK_CORRUPT (mild)部分中文可能受损
II LOWBOM文件含 UTF-8 BOM 头(不影响运行但不够干净)

工具输出示例

========================================================
  PowerShell Encoding Damage Report
========================================================
  File:    C:\project\server.js
  Size:    17.9 KB  (408 lines)
  Backtick: 0
  Dollar{}: 15 total
  Suspicious lines: 12 / 12
  Chinese: 1257 valid / 242 GBK residual
  Syntax:  FAIL
--------------------------------------------------------
  Found 3 issue(s):

  !! [CRITICAL] BACKTICK_LOST
     12 lines use ${} without backticks. Template literals stripped.
  !! [CRITICAL] GBK_CORRUPT
     GBK residual: 242 chars / valid Chinese: 1257 (ratio 0.2)
  !! [CRITICAL] SYNTAX_ERROR
     Unexpected token ...
--------------------------------------------------------
  Critical issues found. Use --fix to attempt repair.

安全写入方法

方法 1:Node.js writeFileSync(最安全)

node -e "fs.writeFileSync('file.js', 'content', 'utf8')"

注意:-e 字符串中的 $ 仍会被 PowerShell 展开,需要用单引号包裹或转义。

方法 2:OpenClaw write 工具(推荐)

直接使用 write 工具创建文件,不走 PowerShell 管道。

方法 3:hex 编码写入(万无一失)

在干净机器上生成 hex:

node -e "const fs=require('fs');const h=fs.readFileSync('file.js').toString('hex');console.log(h)" > file.hex

在目标机器上恢复:

node -e "const fs=require('fs');fs.writeFileSync('file.js',Buffer.from(fs.readFileSync('file.hex','utf8').trim(),'hex'))"

诊断命令(手动)

# 检查语法
node --check file.js

# 检查 BOM 头(正确的文件头应是 63 6f 6e = "con")
node -e "const fs=require('fs');const b=fs.readFileSync('file.js');console.log(b[0].toString(16),b[1].toString(16),b[2].toString(16))"

# 检查反引号数量
node -e "const fs=require('fs');const c=fs.readFileSync('file.js','utf8');const bt=String.fromCharCode(96);console.log('Backtick count:',c.split(bt).length-1)"

修复步骤

  1. 不要用 PowerShell 管道修复! 不要 Get-Content | Set-Content
  2. 用 Node.js 读取原文件:fs.readFileSync('file.js', 'utf8')
  3. 检查编码损坏类型(反引号缺失 / 中文乱码 / 体积暴增)
  4. 如果只是中文乱码:用 --fix 模式自动修复,或用 find/replace 映射
  5. 如果反引号也被吃了:必须从原始源码重写
  6. 最稳妥:用 write 工具直接从原始源码完整重写

预防措施

  • 用 OpenClaw write 工具代替 PowerShell 写文件
  • 改完文件后立刻 node --check 验证语法
  • 复杂 JS 文件用 Node.js writeFileSync 或 hex 编码写入

文件

路径说明
------------
SKILL.md本文档
pwsh-encoding-fix.js可执行诊断修复工具(Node.js脚本)

在其他机器上部署

只需将 pwsh-encoding-fix.js 拷贝到目标机器(任何 Windows 系统),确保已安装 Node.js:

# 从本目录复制到目标机器
# 然后在目标机器上运行
node pwsh-encoding-fix.js 需要检查的文件.js
node pwsh-encoding-fix.js 需要检查的文件.js --fix

无需安装任何 npm 包。GBK 修复需要 iconv-lite(自动检测,无则回退到内置 TextDecoder)。

版本历史

共 1 个版本

  • v1.0.0 当前
    2026-05-29 14:15

安全检测

腾讯云安全 (Keen)

队列中

腾讯云安全 (Sanbu)

队列中

🔗 相关推荐

ai-agent

Skill Generator

jeremycooper2077
提取已完成的工作为可重用的AgentSkills。复杂任务完成后询问用户是否生成技能。
★ 1 📥 278
dev-programming

Mcporter

steipete
使用 mcporter CLI 直接列出、配置、认证及调用 MCP 服务器/工具(支持 HTTP 或 stdio),涵盖临时服务器、配置编辑及 CLI/类型生成功能。
★ 195 📥 67,603
dev-programming

CodeConductor.ai

larsonreever
AI驱动平台,提供快速全栈开发、智能体、工作流自动化及低代码AI集成的可扩展产品创建。
★ 72 📥 181,748