Java 中的乱码问题汇总及解决方案
在 Java 中,由于字符集编码不统一或者操作过程中出现错误,会导致乱码问题的出现。以下是解决 Java 中乱码问题的一些方法总结。
字符集编码不正确
- 确定并设置编码方式
在 Java 的编码过程中,需要使用字符集编码,否则会出现乱码。在开发中,一般使用 UTF-8 编码,若使用其他编码方式,需要明确指定字符集编码。比如说,在服务器端,可以在应用程序或是 Tomcat 的配置文件中,加上以下内容:
<Connector URIEncoding="UTF-8" />
- 转换编码
如果使用了不同的编码方式,那么需要对编码进行转换,可以使用 String 类的构造器或是使用转换类 Charset 编码器。比如说:
String str = new String(text.getBytes("ISO-8859-1"), "UTF-8");
数据库中的乱码问题
- 确认数据库和表使用的编码方式
在通常情况下,MySQL 中的数据库和表使用的是 UTF-8 编码,如果编码方式不符,就会出现乱码。可以使用以下 SQL 语句查询数据库和表的编码方式:
SELECT @@character_set_database;
SELECT @@character_set_table;
- 更换数据库驱动
如果数据库结果中仍然出现乱码,可能是由于 JDBC 驱动程序不兼容 MySQL。需要更换驱动,可使用 UTF-8 向客户端发送与接收信息以支持 UTF-8。
String url = "jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8";
Connection conn = DriverManager.getConnection(url, "root", "password");
示例
示例一
比如说,我们有一个 UTF-8 编码的文本文件,其中包含一些中文字符。我们需要读取这个文件,并将其中的字符输出到控制台上。
import java.io.*;
public class ReadFileExample {
public static void main(String[] args) throws IOException {
File file = new File("text.txt");
InputStream in = new FileInputStream(file);
byte[] bytes = new byte[(int) file.length()];
int len = in.read(bytes);
String str = new String(bytes, "UTF-8");
System.out.println(str);
}
}
示例二
我们要从 MySQL 数据库中读取 UTF-8 编码的数据,并将其输出到控制台上。
import java.sql.*;
public class MySQLExample {
public static void main(String[] args) throws SQLException {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/demo";
String user = "root";
String password = "password";
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement();
String sql = "SELECT * FROM users";
rs = stmt.executeQuery(sql);
while (rs.next()) {
String name = new String(rs.getString("name").getBytes("ISO-8859-1"), "UTF-8");
String address = new String(rs.getString("address").getBytes("ISO-8859-1"), "UTF-8");
System.out.println("Name: " + name + " " + "Address: " + address);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
}
}
这里,我们将使用getBytes()
方法将 ISO-8859-1 编码的字符串转为字节数组,再使用String
类的构造器将字节数组转为 UTF-8 编码的字符串。最后,我们将 UTF-8 编码的字符串输出到控制台上。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 中的乱码问题汇总及解决方案 - Python技术站