我有包含日语字符串AKB48 ネ申テレビ シーズン3的POST数据,在jQuery中定义为data

$("#some_div").load("someurl", { data : "AKB48 ネ申テレビ シーズン3"})

post数据被发送到Java Servlet:
String data = new String(this.request.getParameter("data").getBytes("ISO-8859-1"), "UTF-8");

我的程序将其保存到MySQL,但在将数据保存到数据库后,它将变成:
AKB48 u30CDu7533u30C6u30ECu30D3 u30B7u30FCu30BAu30F33
如果我想把它保存为UTF-8格式,我该怎么办?我所有的文件都是UTF-8格式的。
MySQL编码是utf8,下面是代码
String sql = "INSERT INTO Inventory (uid, item_id, item_data, ctime) VALUES ("
                + inventory.getUid() + ",'"
                + inventory.getItemId() + "','"
                + StringEscapeUtils.escapeJava(inventory.getItemData()) + "',CURRENT_TIMESTAMP)";
    Statement stmt = con.createStatement();
    int cnt = stmt.executeUpdate(sql);

最佳答案

从上面的例子中,我可以验证日文字符串是否被正确地保存到MySQL数据库中,但是它是escaped Unicode
我会按顺序检查这些项目:
您的表和列是否都被设置为具有用于utf8的字符集和排序规则?即。,
CHARACTER SET utf8 COLLATE utf8_general_ci
在POST之前显式设置字符集编码吗?request.setCharacterEncoding("UTF-8");
您正在为数据库连接设置字符编码吗?即jdbc:mysql://localhost:3306/YOURDB?useUnicode=true&characterEncoding=UTF8
正如其他人所指出的,你不应该使用那个getBytes技巧。它肯定会把公布的价值观搞砸。
编辑
不要使用StringEscapeUtils.escapeJava,因为这样会将字符串转换为转义的Unicode。这就是将AKB48 ネ申テレビ シーズン3转化为AKB48 u30CDu7533u30C6u30ECu30D3 u30B7u30FCu30BAu30F33的原因。

07-25 22:50
查看更多