iT邦幫忙

0

JSP和mysql亂碼問題

大家好:
想問該如何解決亂碼問題

之前,我一直都是用

<%@ page contentType="text/html; charset=Big5" %>

在mysql也可以收到正常的文字,顯示也正常


但是,因為我做了多國語言,簡體用big5會亂碼,只好改UTF8

<%@page contentType="text/html" pageEncoding="UTF-8"%>

但我發現UTF8存入mysql就全部變亂碼了....
我爬了文,試著用以下

 request.setCharacterEncoding("utf-8");
  String company =new String( request.getParameter("company").getBytes("8859_1"), "utf-8");

但他輸出的結果都會變成????///....,到mysql也都不正常....


我又試著

<%@page contentType="text/html"%>

這次網頁顯示正常,查詢也不會亂碼,

但mysql會變成

###ghuu

而且我的多國語言全部變成一堆問號.....
https://ithelp.ithome.com.tw/upload/images/20180809/20102983WP7ZpKZew2.jpg

想問該如何處理才能兼顧mysql,多國語言,輸入訊息顯示不亂碼呢?

以下是我的程式碼:

<%@page contentType="text/html" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ include file = "db.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head><meta charset="UTF-8"></head>

  <%
  request.setCharacterEncoding("UTF-8");
    if(request.getParameter("register") != null){
      String company =new String( request.getParameter("company").getBytes("8859_1"), "utf-8");
     String sql = "insert into tt (z1)" + " values ('" + company  +"')"; 
	 int a = stmt.executeUpdate(sql);
         out.println(company);
             }
  %>
 <body>
      <fmt:setLocale value="tw" />
        <fmt:setBundle basename="language/form" var="formBundle" />    
         <fmt:message key="company" bundle="${formBundle}"/> 
	<form action = "r.jsp" method = "post"> 
                    <input type="text" class="form-control" id="company"  name="company">   
         <button type="submit" class="btn btn-default" name = "register" value = "signup">
         送出</button>
        </form>
	    </body> 
	</html>

mysql編碼
https://ithelp.ithome.com.tw/upload/images/20180809/20102983sE6jpESHjn.jpg
謝謝

JSP 檔案格式 內文內碼 MYSQL 資料庫內碼 網頁的宣告 全部要設定成 UTF-8
神威 iT邦新手 4 級 ‧ 2018-08-09 14:21:25 檢舉
窮嘶發發發
我全部都UTF8還是不行....
fysh711426 iT邦研究生 5 級 ‧ 2018-08-09 15:37:28 檢舉
應該是檔案還是 Big5 編碼。

試試看
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="Big5"%>

不過還是把檔案都另存成 UTF-8 比較好~

參考文章:
https://blog.csdn.net/kong_lev/article/details/73071198
1
partyyaya
iT邦新手 5 級 ‧ 2018-08-09 12:42:54
最佳解答

要看你的資料庫編碼格式是否與傳送資料一樣

看更多先前的回應...收起先前的回應...
神威 iT邦新手 4 級 ‧ 2018-08-09 13:09:08 檢舉

mysql是utf8_general_ci

partyyaya iT邦新手 5 級 ‧ 2018-08-09 14:29:19 檢舉

試試看:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

partyyaya iT邦新手 5 級 ‧ 2018-08-09 14:34:07 檢舉

或與mysql連線後面加上:
ex:
jdbc:mysql://localhost:3000/earthquake?useUnicode=true&characterEncoding=UTF-8

神威 iT邦新手 4 級 ‧ 2018-08-09 14:36:35 檢舉

partyyaya
還是不行
還是一堆??????

神威 iT邦新手 4 級 ‧ 2018-08-09 14:45:36 檢舉

partyyaya

jdbc:mysql://localhost:3000/earthquake?useUnicode=true&characterEncoding=UTF-8

還是無法耶.....

partyyaya iT邦新手 5 級 ‧ 2018-08-09 15:36:11 檢舉

或改成
useUnicode=true&characterEncoding=ISO-8859-1

神威 iT邦新手 4 級 ‧ 2018-08-09 16:08:39 檢舉

成功了!!謝謝

fysh711426 iT邦研究生 5 級 ‧ 2018-08-09 18:52:41 檢舉

好奇什麼原因導致 characterEncoding 需設定 ISO-8859-1 而不是 UTF-8
/images/emoticon/emoticon19.gif

1
神威 iT邦新手 4 級 ‧ 2018-08-09 13:20:16 檢舉

https://ithelp.ithome.com.tw/upload/images/20180809/20102983eTsYsyyfoG.jpg
都是UTF8了
我也按照文章指示做了,還是不行耶...

應該是之前資料編碼已經不正確的關係吧…
可以新建資料庫測試一下
https://shazi.info/mysql-%E5%B0%87%E9%A0%90%E8%A8%AD%E8%B3%87%E6%96%99%E5%BA%AB%E7%B7%A8%E7%A2%BC-latin1-%E6%94%B9%E7%82%BA-utf8/

神威 iT邦新手 4 級 ‧ 2018-08-09 14:00:42 檢舉

我新建另一個DB和table但還是不行耶....
https://ithelp.ithome.com.tw/upload/images/20180809/20102983oC4W0OP9sR.jpg
https://ithelp.ithome.com.tw/upload/images/20180809/201029831T9nyRKzbN.jpg

2
小魚
iT邦好手 1 級 ‧ 2018-08-09 12:01:06

MySql的編碼是什麼?
我是用 CHARACTER SET = utf8, COLLATE = utf8_general_ci

神威 iT邦新手 4 級 ‧ 2018-08-09 13:07:38 檢舉

https://ithelp.ithome.com.tw/upload/images/20180809/201029839wxdgzwgDE.jpg

我要發表回答

立即登入回答