2011-09-13 52 views
0

我目前正在我的主頁上工作,它完全由許多java類和MYSQL數據庫支持。ÅØÆ - 麻煩的文本編碼從HTML - > Java - > MySQL - > Java - > HTML

我有一個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,但沒有運氣。

我該怎麼辦?

回答

2

您的CGI程序正在接收像這樣編碼的文本。 %2C是逗號(十六進制中的0x2c,十二進制中的32 + 12 = 44 - 44是ascii逗號http://www.asciitable.com/index/asciifull.gif)的urlencoded版本。

%C3%A6是æ的UTF-8編碼的版本的urlencoded的版本

%C3%B8是的ø

%C3%A5的UTF-8編碼的版本的urlencoded的版本(a)將原始的urlencoded流轉換爲urldecoded流;(b)將原始urlencoded流轉換爲urldecoded流;然後 (b)將您的urldecoded流解釋爲UTF-8

+0

非常完美,非常感謝。這些字符現在可以正確插入到數據庫中。現在我只需要將它們正確地取出並顯示出來。目前我得到???。非常感謝您的幫助 –

+0

你什麼時候得到? - 從網頁瀏覽器?它是否從mysql命令行客戶端正確顯示? – torstenvl

+0

我通過在Java中將輸出編碼添加到我的輸出寫入程序來修復它。這解決了問題,現在所有東西都應該顯示。再一次,非常感謝您的幫助。 –