好学云谱 · 开发规范
UTF-8 编码规则
本项目所有源码、文档、配置、测试脚本和生成模板均统一使用 UTF-8。中文乱码通常来自 Windows PowerShell / 重定向 / 脚本写文件时使用了系统默认编码,开发时必须遵守以下规则。
必须遵守
- 所有新增文件必须保存为
UTF-8,不要使用 ANSI、GBK、GB2312。 - 编辑器必须尊重根目录
.editorconfig:charset = utf-8、end_of_line = lf。 - PowerShell 查看中文文件时使用:
powershell
Get-Content -Encoding UTF8 -Path README.md- PowerShell 写入中文文件时必须显式指定 UTF-8:
powershell
Set-Content -Encoding UTF8 -Path docs\example.md -Value $text
Add-Content -Encoding UTF8 -Path docs\example.md -Value $line- Node.js 读写文本文件时必须显式使用
utf8:
js
import fs from "node:fs/promises";
const text = await fs.readFile("README.md", "utf8");
await fs.writeFile("docs/example.md", text, "utf8");- 自动化脚本、Codex、批处理或一次性修复脚本只要会读写中文文件,也必须显式指定
UTF-8/utf8。不要依赖系统默认编码。 - 修改中文源码时优先使用项目内已有编辑工具或补丁方式,避免用终端重定向直接覆盖整文件。
- 浏览器页面必须保留:
html
<meta charset="UTF-8" />- HTTP 返回 HTML、CSS、JS、JSON、Markdown 时应带 UTF-8 charset,例如:
http
Content-Type: text/html; charset=utf-8禁止事项
- 不要用未指定编码的 PowerShell 命令重写中文文件。
- 不要用
Out-File/>/>>直接生成含中文的源码或文档,除非已经明确当前环境输出为 UTF-8,并经过验证。 - 不要用
cmd /c echo 中文 > file、批处理重定向、未声明编码的 Python/Node 临时脚本覆盖中文文件。 - 不要把终端里显示的乱码复制回源码文件。
- 不要混用 GBK/ANSI 文件作为模板。
Windows 终端建议
如果 PowerShell 中查看中文出现乱码,先切换控制台代码页:
powershell
chcp 65001
$OutputEncoding = [System.Text.UTF8Encoding]::new()
[Console]::InputEncoding = [System.Text.UTF8Encoding]::new()
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()注意:chcp 65001 只影响终端显示,不等于文件已经是 UTF-8。文件写入仍需显式指定 -Encoding UTF8。
提交流程检查
修改含中文的文件后,至少做一次 UTF-8 读取检查:
powershell
Get-Content -Encoding UTF8 -Path js\views\login.js | Select-Object -First 20若看到类似 浜戣氨、璋卞、鐧诲綍 的文本,说明文件内容或读取方式可能已经乱码,需要立刻停止继续编辑,回到最近正常版本重新处理。
打包或发布前建议抽查关键中文文件:
powershell
Get-Content -Encoding UTF8 -Path README.md | Select-Object -First 5
Get-Content -Encoding UTF8 -Path docs\开发规范.md | Select-Object -First 20
Get-Content -Encoding UTF8 -Path js\views\login.js | Select-Object -First 20
Get-Content -Encoding UTF8 -Path js\views\documents.js | Select-Object -First 20如果需要在 PowerShell 中批量检查疑似乱码,可先搜索常见 mojibake 片段:
powershell
rg "浜|璋|鐧|绠|Ã|Â|�" README.md docs js css index.html service-worker.js搜索命中不一定都是乱码,但发布前必须人工确认。
本项目常见中文文件
README.mddocs/*.mdindex.htmljs/**/*.jscss/**/*.cssservice-worker.js
这些文件出现乱码会直接影响应用界面、离线缓存和打包产物。