Re: [J2SE] 請問系統安裝的JRE顯示中文的編碼問題

看板java作者 (jims)時間14年前 (2009/12/08 16:25), 編輯推噓3(301)
留言4則, 4人參與, 最新討論串3/3 (看更多)
之前問題擱著幾天未解 昨天又開始研究,不過似乎還是有問題 因此再來請教版友是否有其他方法 我用Swing的choose選擇中文檔案後(部分程式碼略) JFileChooser chooser = new JFileChooser(System.getProperty("user.home")); File[] sf = chooser.getSelectedFiles(); //網路上找到的轉碼方式 String unicode = sf[0].getName(); byte[] sysec = unicode.getBytes(System.getProperty("file.encoding")); byte[] utf8 = new String(sysec,System.getProperty("file.encoding")).getBytes("UTF-8"); String target = new String(utf8); 最後我只是要把target這個字串寫進資料庫(資料庫設定皆為UTF-8) 不過資料庫出現的中文卻有部分字元為?? 請問各位這裡是否有哪個環節造成這樣的轉碼失誤? ******************************************* 最新測試狀況 其實我後端是用某個學術單位的特殊資料庫metaServer 我自己用postgre測試註冊這檔名後發現 根本不需要這修轉碼~chooser.getSelectedFiles拿到的string直接可以正常寫入 問題可能在這個metaServer,他其實是在postgreSQL資料庫上面加上 一層介面,所以我等於用他的client API跟他的metaServer service連線 這個metaServer在將我的查詢SQL語法轉成PostgreSQL裡面相對應的表格名稱 送出查詢語法(這部分似乎是ODBC連線) 圖解: sql:INSERT INTO metadata(name) VALUES ('"+target+"') metaServer Client: execute(sql) -------------------------------------- http -------------------------------------- metaServer Service:tran(sql) Tsql:INSERT INTO dir16(user:name) VALUES ('"+target+"') --------------------------------------- ODBC --------------------------------------- PostgreSQL:execute(Tsql) 這樣的架構下,如果jre的編碼是UTF-8的環境下 中文檔名不需處理就可以順利寫入 但是jre如果是MS950,就會出現錯誤 我試過下java -Dfile.encoding=UTF-8 testUpload 這樣是可以順利註冊無誤 不過實際環境是JWS方式執行,我無法讓使用者下載我的class之後更改jre的編碼 (或是我的jnlp可以對user啟用jre的編碼作設定?) 所以似乎得在我的程式裡面對choose取得的中文檔名作處理~~ 這就是目前沒法解決的部分

12/08 19:16, , 1F
資料庫設定 UTF-8,但是 JDBC 忘記設?(mysql 要)
12/08 19:16, 1F

12/08 19:29, , 2F
哪個環節有對,你要不要先印出來看看
12/08 19:29, 2F

12/08 23:42, , 3F
看看你的 conUrl 有沒有加 characterEncoding=utf-8
12/08 23:42, 3F
※ 編輯: jimshsu 來自: 220.136.87.45 (12/09 11:26)

12/10 10:24, , 4F
解決了InputStreamReader(socket.getInputStream(),"UTF-8
12/10 10:24, 4F
文章代碼(AID): #1B7WritJ (java)
文章代碼(AID): #1B7WritJ (java)