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

Groovy脚本西里尔字符输出异常问题求助

解决Groovy在Windows 10下西里尔字符输出异常的问题

问题背景

Windows 10 x64环境下,Groovy脚本输出西里尔字符时出现问号或乱码;开启「Beta:使用Unicode UTF-8提供全球语言支持」选项后,CMD/PowerShell可正常显示西里尔字符,但Groovy脚本仍异常;手动设置System.out为UTF-8输出后,内容变为乱码,相同环境下Python脚本无此问题。

有效解决方案

方案1:启动Groovy时指定JVM编码参数

运行脚本时,通过-Dfile.encoding=UTF-8强制JVM使用UTF-8编码处理控制台输出,直接匹配Windows UTF-8控制台的编码要求:

groovy -Dfile.encoding=UTF-8 your_script_name.groovy

如果是在IDE(如IntelliJ IDEA)中运行,需在Run Configuration的VM Options中添加:

-Dfile.encoding=UTF-8

方案2:在脚本中适配Windows控制台编码

若无法修改启动参数,可在脚本开头添加以下代码,确保输出流与Windows UTF-8控制台正确匹配:

import java.io.OutputStreamWriter
import java.io.PrintWriter

// 替换默认输出流为UTF-8编码的Writer,避免双重编码问题
def utf8Out = new PrintWriter(new OutputStreamWriter(System.out, "UTF-8"), true)
System.out = utf8Out

// 原脚本代码
def rusAlphabet = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'
def lowerCaseRusAlphabet = 'абвгдеёжзийклмнопрстуфхцшщъыьэюя'

println(rusAlphabet)
println(rusAlphabet.toLowerCase())
println(lowerCaseRusAlphabet)

问题原因说明

  • Windows开启UTF-8 Beta选项后,控制台代码页变为65001(UTF-8),但Groovy依赖的JVM默认仍使用系统旧编码(如CP1251或GBK)处理字符串输出,编码不匹配导致字符显示为问号。
  • 直接替换System.out为UTF-8 PrintStream时,若JVM未同步更新编码上下文,会出现双重编码(字符串先转默认编码字节,再被UTF-8 PrintStream二次转码),最终导致乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:14:52