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

Java中非英文字符正确编码:多语言内容乱码问题排查

解决Java中多语言UTF-8字符处理乱码问题

你的代码出现乱码的核心原因是不必要且错误的字节数组转换操作,咱们一步步拆解问题并解决:

问题出在哪里?

你写的这段代码:

String content = "Εισιτήρια"; 
System.out.println(new String(content.getBytes(), "UTF-8"));

这里的content.getBytes()没有指定编码,会默认使用系统平台的编码(比如Windows上的GBK、Linux上的UTF-8)。如果你的系统默认编码不是UTF-8,这一步会把原本正确的Unicode字符串(Java内部String都是Unicode编码)转成错误的字节序列,再用UTF-8解码自然会出现�这种无法识别的替换字符。

正确的处理方式

Java的String本身就是基于Unicode的,只要保证输入环节编码正确、输出环节编码正确,就不需要做这种画蛇添足的转换。

1. 处理字符串字面量的情况

如果是直接在代码里写多语言字符串,需要两步确保正确:

  • 把你的.java文件保存为UTF-8编码(大多数IDE默认就是,但最好确认一下,比如IDEA里可以在File→Settings→Editor→File Encodings里设置);
  • 编译时指定UTF-8编码(避免编译器用系统默认编码解析文件):
    javac -encoding UTF-8 YourClass.java
    

然后直接输出即可,不需要额外转换:

public class Test {
    public static void main(String[] args) {
        String content = "Εισιτήρια";
        System.out.println(content);
    }
}

2. 处理从文件/输入流读取内容的情况

读取文件时必须明确指定UTF-8编码,避免依赖系统默认编码:

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Test {
    public static void main(String[] args) throws Exception {
        // 读取UTF-8编码的文件内容
        String content = Files.readString(Paths.get("your-content.txt"), StandardCharsets.UTF_8);
        System.out.println(content);
    }
}

3. 解决控制台输出乱码的问题

如果控制台默认编码不是UTF-8(比如Windows的cmd默认是GBK),即使字符串本身正确,输出也会乱码。可以强制设置控制台输出的编码:

import java.io.PrintStream;
import java.nio.charset.StandardCharsets;

public class Test {
    public static void main(String[] args) {
        // 将控制台输出编码设置为UTF-8
        System.setOut(new PrintStream(System.out, true, StandardCharsets.UTF_8));
        String content = "Εισιτήρια";
        System.out.println(content);
    }
}

总结

核心原则就是:输入时用UTF-8解码,输出时用UTF-8编码,不要随意将String转成字节数组再转回String,因为这很容易引入编码不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:34:49