这是我第一次在 StackOverFlow 上提问。我英语说的不好。请原谅我。
我有一个问题,我的应用程序返回一个奇怪的字符。
PlayStation\ufffd\ufffd4 Pro
它必须是这样的:
PlayStation®4 Pro
我认为'\ufffd' 字符代表这个,'REPLACE CHARACTER'。
我的应用程序使用的是 jdk 1.6。
我发现当我将应用程序的 jdk 更改为 1.7 时,它会正确打印字符。
PlayStation®4 Pro
更多信息
我的应用程序使用ibatis
了,之后出现问题queryForObject
。
public class A {
private String content;
public String getContent() {
return content;
}
}
A a = (A)queryForObject("mapper.getSomething", params);
return a;
// jdk1.6 - a.getContent() : PlayStation\ufffd\ufffd4 Pro
// jdk1.7 - a.getContent() : PlayStation®4 Pro
JDBC 连接属性是这样的。
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://{IPADDRESS}/{DBNAME}?Unicode=true&characterEncoding=MS949&zeroDateTimeBehavior=convertToNull&socketTimeout=500000&connectTimeout=500000
更多信息 2
- 我在没有ibatis和其他人的情况下进行了测试。直接用jdbc连接,结果一样。
public class CharacterEncodeTest {
// JDBC driver name and database URL
static final String DB_URL = "jdbc:mysql://{IPADDRESS}/{DBTNAME}}?Unicode=true&characterEncoding=MS949&zeroDateTimeBehavior=convertToNull&socketTimeout=500000&connectTimeout=500000";
// Database credentials
static final String USER = "{USER}";
static final String PASS = "{PASSWORD}";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 3: Open a connection
System.out.println("Connecting to a selected database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println("Connected database successfully...");
//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql = "SELECT * from TABLE";
ResultSet rs = stmt.executeQuery(sql);
//STEP 5: Extract data from result set
while (rs.next()) {
//Retrieve by column name
String content = rs.getString("content");
//Display values
System.out.print("content: " + content);
// jdk1.6 : PlayStation\ufffd\ufffd4 Pro
// jdk1.7 : PlayStation®4 Pro
}
rs.close();
} catch (SQLException se) {
// something
} finally {
// something
}//end try
}
}
问题
唯一的区别只是更改 jdk 版本。
关于这个问题,jdk 1.6 和 1.7 有什么区别?
jdk 1.6有解决这个问题的办法吗?