Это мой первый вопрос в StackOverFlow.Я не очень хорошо владею английским языком.Пожалуйста, извините.
У меня проблема с тем, что мое приложение возвращает странный символ.
PlayStation \ ufffd \ ufffd4 Pro
Itдолжно быть примерно так:
PlayStation®4 Pro
Я думаю, что символ '\ ufffd' представляет this, '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-соединения похоже наthis.
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?