【问题标题】:ÅØÆ - Trouble with the text encoding from HTML -> Java -> MySQL -> Java -> HTMLÅØÆ - HTML -> Java -> MySQL -> Java -> HTML 的文本编码问题
【发布时间】:2011-09-14 03:32:28
【问题描述】:

我目前正在开发我的主页,该主页完全由许多 java 类和一个 MYSQL 数据库支持。

我有一个 HTML 表单,允许查看者输入评论。然后这个文本被一个 CGI 脚本解析到 java 类中,我在其中读取文本:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String[] data = {in.readLine()};

然后使用以下内容将评论解析到数据库中:

Connection conn;
        forName("com.mysql.jdbc.Driver").newInstance();
        //String url = "jdbc:mysql://localhost/pagebuilder";
        String url = "jdbc:mysql://localhost/pagebuilder?useUnicode=true&characterEncoding=utf-8";
        //String url = "jdbc:mysql://localhost/pagebuilder?characterEncoding=utf-8";       
        String userName = "username";
        String password = "password";
        conn = DriverManager.getConnection(url, userName, password);

        return conn;
    }

    public static void closeConnection(Connection conn) throws SQLException {
        conn.close();
    }

    public static void comment(String image, String name, String comment, String email){

    Connection conn = null;
    try {
        conn = Database.getConnection();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    if (conn != null) {
        try {
            java.sql.Timestamp  sqlDate = new java.sql.Timestamp(new java.util.Date().getTime());

            PreparedStatement pstmt1 = conn.prepareStatement("INSERT INTO comment VALUES(0,?,?,?,?,?)");
            pstmt1.setTimestamp(1,sqlDate);
            pstmt1.setString(2, image);
            pstmt1.setString(3, name);
            pstmt1.setString(4, comment);
            pstmt1.setString(5, email);

            pstmt1.executeUpdate();
            conn.close();
        }

如果我输入特殊的丹麦字符,例如æøp 甚至逗号,输出如下:

输入:,æøå

输出:%2C%C3%A6%C3%B8%C3%A5

如何保持输入和输出相同?

我多次尝试将 HTML、Java 连接和数据库设置为 UTF-8,但都没有成功。

我能做什么?

【问题讨论】:

    标签: java mysql html utf-8 character-encoding


    【解决方案1】:

    您的 CGI 程序正在接收这样编码的文本。

    %2C 是逗号的 urlencoded 版本(十六进制的 0x2c,十进制的 32+12 = 44 -- 44 是 ascii 逗号 http://www.asciitable.com/index/asciifull.gif)。

    %C3%A6 是 æ 的 UTF-8 编码版本的 urlencoded 版本

    %C3%B8 是 ø 的 UTF-8 编码版本的 urlencoded 版本

    %C3%A5 是 å 的 UTF-8 编码版本的 urlencoded 版本

    您需要做的是: (a) 将您的原始 urlencoded 流转换为 urldecoded 流;接着 (b) 将您的 urldecoded 流解释为 UTF-8

    【讨论】:

    • 完美,非常感谢。现在字符已正确插入到数据库中。现在我只需要将它们正确取出并显示。目前我得到???。非常感谢您的帮助
    • 你什么时候收到??? - 从网络浏览器?它是否从 mysql 命令行客户端正确显示?
    • 我通过向我的 Java 输出编写器添加编码来修复它。这解决了问题,现在一切都按原样显示。再次感谢您的帮助。
    猜你喜欢
    • 2016-11-04
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多