Windows下运行rails命令报UTF-8编码错误 如何修改gem env目录
Windows下Ruby/Rails用户名特殊字符UTF-8报错解决方法
报错核心原因是RubyInstaller发布的Ruby 3.x版本对Windows用户目录下的非ASCII字符(比如变音符号、中文等)编码解析存在兼容问题,不需要修改系统用户名或注册表(该操作极易引发系统软件配置异常,你之前遇到的故障就是典型表现),通过环境变量重定向gem相关路径即可彻底解决,操作步骤如下:
方案1:重定向gem路径到纯英文目录(推荐,零系统风险)
- 提前创建纯英文无空格、无特殊字符的根目录,比如
C:\ruby_data,在目录下新建三个子文件夹:gems、spec_cache、bundle_config,最终路径:C:\ruby_data\gems C:\ruby_data\spec_cache C:\ruby_data\bundle_config - 按下Win+S搜索「编辑系统环境变量」,打开面板后点击「环境变量」按钮,在当前用户的用户变量区(不要改系统变量区)新建三个变量:
- 变量名
GEM_HOME,变量值填C:\ruby_data\gems - 变量名
GEM_SPEC_CACHE,变量值填C:\ruby_data\spec_cache - 变量名
BUNDLE_USER_HOME,变量值填C:\ruby_data\bundle_config
- 变量名
- 找到当前用户变量里的
Path条目,点击编辑,新增一条C:\ruby_data\gems\bin,将这条条目上移到靠前位置,保证gem安装的命令行工具能被优先找到。 - 全部保存后关闭所有已打开的终端、CMD、PowerShell窗口,重新开一个新终端,执行
gem env校验,此时USER INSTALLATION DIRECTORY和SPEC CACHE DIRECTORY会显示为你刚配置的纯英文路径,再执行rails new相关命令就不会触发编码错误。
注意:如果之前在旧的报错路径下安装过Rails等gem包,建议在新终端里重新执行
gem install rails,把包装到新的GEM_HOME路径下,避免后续调用命令时出现找不到文件的问题。
方案2:强制Ruby默认使用UTF-8编码(临时方案,不推荐长期用)
如果不想修改gem存储路径,可以在用户变量里新建RUBYOPT变量,变量值设为-EUTF-8,强制Ruby所有IO操作默认使用UTF-8编码,部分场景下可以识别用户名里的非ASCII字符,但这个方案存在兼容隐患:如果Windows系统本地代码页不是UTF-8,后续读写本地文件、调用系统命令时大概率会随机出现其他编码报错,优先选方案1。
内容的提问来源于stack exchange,提问作者Slaveworx
相关产品推荐
相关产品推荐

