ÅØÆ - проблема с кодировкой текста из HTML -> Java -> MySQL -> Java -> HTML - PullRequest
0 голосов
/ 13 сентября 2011

Я сейчас работаю над своей домашней страницей, которая полностью поддерживается рядом 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, но безуспешно.

Что я могу сделать?

1 Ответ

2 голосов
/ 13 сентября 2011

Ваша CGI-программа получает код в таком виде.

% 2C - запятая версия запятой (0x2c в шестнадцатеричном формате, 32 + 12 = 44 в десятичном виде - 44 - запятая http://www.asciitable.com/index/asciifull.gif).

% C3% A6 - это кодированная в UTF-версии версия UTF-8 *

% C3% B8 - это версия в кодировке UTF-8 ø * 1008 в кодировке URF-8 *

% C3% A5 - это кодированная в UTF-версии версия UTF-8 с кодом

Что вам нужно сделать, это: (а) преобразовать ваш необработанный поток, кодированный в url-кодированный поток; а потом (б) интерпретировать ваш URL-кодированный поток как UTF-8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...