【发布时间】:2011-01-29 13:34:13
【问题描述】:
首先:请原谅我的英语。 然后……
我在 Centos5.5 上有一个 Tomcat6 服务器,配置了 JDBC 资源池。
<Resource name="jdbc/BD"
auth="Container"
type="javax.sql.DataSource"
username="user"
password="pass"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/BD?autoReconnect=true&useEncoding=true&characterEncoding=UTF-8"
maxActive="30"
maxIdle="50"
maxWait="-1"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="300000"
/>
我编写了一个类来建立与该数据源的连接(名为 DAO);
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/BD");
connexio = ds.getConnection();
sentencia = connexio.createStatement();
这里有我用来抛出查询的代码:
DAO conn = new DAO();
ResultSet SQLresults = conn.executeSQL(SQLQuery);
while (SQLresults.next()) {
String string1 = SQLresults.getString(2);
String string2 = SQLresults.getString(3);
String string2 = SQLresults.getString(4).replaceAll("[\n\r]", " ");
String string3 = SQLresults.getString(5).replaceAll("[\n\r]", " ");
String string4 = SQLresults.getString(6).replaceAll("[\n\r]", " ");
}
我的 DDBB (MySQL) 默认使用 UTF8,我使用“default charset=utf8”创建了所有表以确保这一点。
还有……
我几乎可以使用格式正确的 UTF8 字符编码,但有时我会遇到一些字符错误。我确定问题出在 mysql 和 tomcat 之间(所以在我的 servlet 或 JDBC 连接中),因为在 servlet 写入它们之后我看到一些格式错误的字符,但它们在 MySQL UTF8 提示符下格式正确我的终端。
例如,在 MySQL UTF8 终端(Putty、iMac 终端、Ubuntu 和 Debian 终端)中,我看到:
德国亚马逊售价 499 欧元的 LG Optimus 2X 和 Optimus Black 尚未开售
但我的 servlet 写道:
德国亚马逊标价 499 欧元的 LG Optimus 2X 和 Optimus Black,尚未开售
当我解码时,“â?¬”应该是一个“€”......但它不是。格式不好。
其他示例字符,在我的 UTF8 终端中:
David Trueba:“Leer novelas me llevó al guión”:推文 RUBÉN DARÍO ÁLVARE...
小服务程序:
David Trueba: â??Leer novelas me llevó al guiónâ?: Tweet RUBÃ?N DARÃO ÃLVARE...
但是“â??”、“â?”、“Ã?”应该是“”É(解码后),但它们是损坏的 UTF8 字符,我不知道为什么,因为 85% 的 UTF8 字符被完美解码。您可以通过以下方式看到这一点:ó Í Á 因为它们的格式完全正确。
你怎么看?如果有帮助,我会将该 UTF8 文本发送到 Android 设备,当有格式错误的 UTF8 字符时,我会看到 .
顺便说一句,我使用此页面来确定良好的 UTF8 文本:
http://www.cafewebmaster.com/online_tools/utf_decode
而且....它确认了格式正确和格式错误的字符。
啊!,servlet 在浏览器中写入文本(没有 html 语句,只有文本),但我一直在做一些测试,如果我将其转换为 html 页面并将格式错误的数据放在正文中并强制它们为 utf8:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
结果是一样的。
非常感谢!
【问题讨论】:
标签: tomcat servlets jdbc utf-8 character-encoding