gpt4 book ai didi

java - 为什么在 java 6 和 java 7 中获取字符 ®(U+00AE) 不同?

转载 作者:行者123 更新时间:2023-12-02 01:41:18 24 4
gpt4 key购买 nike

这是我第一次在 StackOverFlow 上提问。我不擅长英语。请原谅。

我遇到一个问题,我的应用程序返回了一个奇怪的字符。

PlayStation\ufffd\ufffd4 Pro

它必须是这样的:

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连接属性是这样的。

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版本

  1. jdk 1.6和1.7在这个问题上有什么区别?

  2. jdk 1.6有解决这个问题的方案吗?

最佳答案

不知道\ufffd 是什么,但 ® 符号是\u00ae:https://www.fileformat.info/info/unicode/char/00ae/index.htm

关于java - 为什么在 java 6 和 java 7 中获取字符 ®(U+00AE) 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54420161/

24 4 0