@charset "utf-8" 仅作用于 sass 解析阶段,无法解决 ruby 读取文件时的 gbk 解码失败;根本原因是 windows 下 ruby 默认 external encoding 为 gbk,需修改 engine.rb 设置 encoding.default_external = encoding.find('utf-8'),并确保文件保存为 utf-8 无 bom、项目路径不含中文。

@charset "UTF-8" 单独加在 SCSS 文件头部,不能解决编译报错,只对最终生成的 CSS 文件编码声明有效。真正卡住编译的是 Ruby 读取源文件时的解码失败——它根本没机会看到这行声明。
为什么 @charset "UTF-8" 加了还是报 Invalid GBK character "\xE5"
@charset "UTF-8" 加了还是报 Invalid GBK character "\xE5"
错误信息里那个 "\xE5" 是 UTF-8 编码的汉字“我”或“中”的首字节,但 Ruby 用 GBK 去解,自然崩了。此时 Sass 解析器压根没启动,@charset 还躺在文件里没被读到。
-
@charset "UTF-8"必须是文件第一行、第一个字符(不能有 BOM、空格、注释) - 它只影响 Sass 解析器后续内容的解释方式,不干预 Ruby 打开文件时的底层解码
- Windows 下 Ruby 2.0+ 默认
Encoding.default_external是 GBK,不是 UTF-8 - 旧版编辑器(如记事本、老版 Sublime)保存时带 BOM,会导致
@charset实际不在首字节位置
必须修改 engine.rb 设置 Ruby 默认外部编码
engine.rb 设置 Ruby 默认外部编码找到你当前项目实际使用的 Sass gem 对应的 engine.rb 文件(别只看全局 Ruby 路径):
- 先运行
sass -v确认版本,再用gem which sass或bundle show sass查真实路径 - 典型路径示例:
C:\Ruby25-x64\lib\ruby\gems\2.5.0\gems\sass-3.7.3\lib\sass\engine.rb(Windows)或/usr/local/lib/ruby/gems/3.0.0/gems/sass-3.7.4/lib/sass/engine.rb(macOS) - 在所有
require语句之后、class Sass::Engine定义之前插入一行:Encoding.default_external = Encoding.find('utf-8') - 保存文件时务必用 UTF-8 无 BOM 编码(VS Code、Sublime、WebStorm 默认都行;记事本要手动选“UTF-8”而非“ANSI”)
GUI 工具(Koala、CodeKit)和项目路径里的中文也要检查
这类工具往往自带私有 Ruby 环境,它们调用的不是你系统 PATH 里的 Sass,而是自己捆绑的 gem。所以改系统 Ruby 下的 engine.rb 没用。
- Koala:进安装目录找
resources\app\node_modules\sass\lib\sass\engine.rb类似路径(实际取决于其内嵌 Ruby 版本) - CodeKit:偏好设置 → “Advanced” → 点 “Show Sass Path”,进去找对应 gem 的
engine.rb - 项目所在路径含中文文件夹(比如
D:\我的项目\src\style.scss)也会触发 Ruby 编码异常,临时改英文路径验证是否是这个原因
真正起作用的是 Ruby 层级的 Encoding.default_external 切换,@charset "UTF-8" 只是配合项。漏掉任意一环——文件编码不对、engine.rb 没改对、GUI 工具路径没找对、项目路径含中文——中文注释都会在读取阶段就失败。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











