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

Groovy中UTF-8字节转字符串出现乱码问题求助

问题解决:Groovy中UTF-8字节数组转字符串后乱码的修复

问题核心

希腊字符序列ΜΎΚΟΝΟΣ处理后变为ΜΎΚΟ?ΟΣ,对应UTF-8字节0xce 0x9d(对应字符Ν)转字符串再转回字节时,被替换为0xce 0x3f(问号的UTF-8编码)。根源是未显式指定字符集,导致使用平台默认字符集转码,而默认字符集不支持该希腊字符,转码时丢失信息。

修复方案

转字符串和转回字节数组时,必须显式指定UTF-8字符集,避免依赖平台默认值:

  • 字节转字符串:new String(bytes, StandardCharsets.UTF_8)
  • 字符串转字节:.getBytes(StandardCharsets.UTF_8)

修正后的代码

import java.nio.charset.StandardCharsets;

def myUTF8String = "ce9cce8ece9ace9fce9dce9fcea3"
def bytes = myUTF8String.decodeHex();

// 全程显式使用UTF-8字符集进行转换
content = new String(bytes, StandardCharsets.UTF_8).getBytes(StandardCharsets.UTF_8)
for (i = 0; i < content.length; i++) {
    if (bytes[i] != content[i]) {
        println "Different... at pos " + i
        def hexBytes = Long.toUnsignedString(bytes[i], 16).toUpperCase().padLeft(2, '0')
        def hexContent = Long.toUnsignedString(content[i], 16).toUpperCase().padLeft(2, '0')
        println "${hexBytes} != ${hexContent}"
    }
}

说明

运行修正后的代码不会输出任何差异,字节序列完全匹配,字符也能正确显示为ΜΎΚΟΝΟΣ。显式指定字符集是跨平台处理多语言字符的标准做法,可避免因运行环境不同导致的编码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:40:47