控制台输出汉字的基础方法
在Java中,控制台输出汉字最直接的方式是使用System.out.print()或System.out.println()方法,Java的字符串类型(String)本身支持Unicode字符,因此只要源代码文件编码正确,汉字可以直接作为字符串字面量使用。

public class ConsoleOutput {
public static void main(String[] args) {
System.out.println("你好,Java!");
System.out.print("这是第一行");
System.out.println("这是第二行,在同一行输出");
}
}
需要注意的是,若输出结果出现乱码,通常与控制台的默认编码有关,Windows系统的控制台默认编码为GBK,而Java源代码文件若以UTF-8编码保存,可能导致汉字无法正确显示,此时可通过以下方式解决:
- 修改控制台编码:在命令行中使用
chcp 65001命令切换到UTF-8编码(65001是UTF-8的代码页)。 - 设置JVM参数:运行程序时添加
-Dfile.encoding=UTF-8参数,强制JVM使用UTF-8编码处理输出,java -Dfile.encoding=UTF-8 ConsoleOutput。
文件输出汉字的正确实践
将汉字写入文件时,核心是确保文件的编码与写入时的字符编码一致,Java提供了字节流(FileOutputStream)和字符流(OutputStreamWriter、BufferedWriter)两种方式,推荐使用字符流并显式指定编码,以避免乱码。
使用字符流写入汉字
import java.io.*;
public class FileOutput {
public static void main(String[] args) {
String content = "这是要写入文件的汉字内容。";
try (OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("chinese.txt"), "UTF-8");
BufferedWriter bw = new BufferedWriter(osw)) {
bw.write(content);
bw.newLine(); // 写入换行符
bw.append("追加的第二行汉字。");
} catch (IOException e) {
e.printStackTrace();
}
}
}
关键点说明:
OutputStreamWriter是字节流与字符流的桥梁,通过构造方法指定编码(如"UTF-8"、"GBK"),确保写入的字节流按指定编码转换。BufferedWriter提供缓冲功能,减少直接IO操作次数,提高写入效率。- 文件打开时若未指定编码,默认使用JVM的默认编码(可通过
System.getProperty("file.encoding")查看),可能导致与预期编码不一致,因此务必显式指定。
网络环境下的汉字输出
在Web开发中,汉字输出涉及HTTP响应头的编码设置,无论是Servlet还是JSP,都需要确保客户端浏览器能正确解析汉字编码。
Servlet输出汉字
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ChineseServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置响应内容类型和编码
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>汉字输出示例</title></head>");
out.println("<body>");
out.println("<h1>Servlet输出的汉字:你好,世界!</h1>");
out.println("</body></html>");
}
}
JSP输出汉字
JSP页面通过page指令指定编码,

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>JSP汉字输出</title>
</head>
<body>
<p>JSP直接输出汉字:Java是一门强大的编程语言。</p>
</body>
</html>
关键点:
response.setContentType()必须包含charset参数,如"UTF-8",否则浏览器可能使用默认编码(如ISO-8859-1)解析,导致乱码。- 表单提交时,若包含汉字数据,需确保请求体的编码与页面编码一致(如
request.setCharacterEncoding("UTF-8"))。
常见编码问题及解决方案
汉字处理中最常见的问题是乱码,其根本原因是编码与解码使用的字符集不一致,以下是典型场景及解决方法:
源代码文件编码与JVM读取编码不一致
若源代码文件以GBK编码保存,但编译时JVM默认使用UTF-8,可能导致编译错误或乱码,解决方法:
- 统一使用UTF-8编码保存源代码(IDE中设置文件编码为UTF-8)。
- 编译时显式指定源文件编码:
javac -encoding UTF-8 ChineseOutput.java。
文件读写编码不一致
使用FileReader读取文件时,若未指定编码,会使用JVM默认编码,可能导致与文件实际编码不符。
// 错误示例:未指定编码,可能乱码
FileReader fr = new FileReader("chinese.txt");
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
正确做法:使用InputStreamReader并指定编码:

try (InputStreamReader isr = new InputStreamReader(
new FileInputStream("chinese.txt"), "UTF-8");
BufferedReader br = new BufferedReader(isr)) {
String line = br.readLine();
System.out.println(line);
}
数据库连接编码问题
JDBC操作数据库时,若数据库字符集与Java应用字符集不一致,可能导致汉字乱码,解决方法:
- 数据库表、字段、连接URL均指定UTF-8编码(如MySQL连接URL:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8)。
Java输出汉字的核心在于“编码一致”:
- 控制台输出:确保源代码编码与控制台编码一致,必要时通过JVM参数调整。
- 文件输出:使用字符流(
OutputStreamWriter)并显式指定UTF-8等编码。 - 网络输出:设置正确的
Content-Type和charset参数,确保浏览器解析无误。 - 通用原则:统一使用UTF-8编码(Java 9+默认字符集为UTF-8),避免编码混用,从源头减少乱码问题,通过合理选择IO工具和显式处理编码,Java可以稳定、正确地输出汉字。












