I have to save non-english (special character) in MySql using Java code , When i am trying to do so data is getting saved as ??????
String dataStr = "κωνσταντίνα";
System.out.println("Before " + dataStr);
String dataStr1 = new String(dataStr.getBytes("ISO-8859-1"),"UTF-8");
System.out.println("after "+dataStr1);
String st = URLDecoder.decode("κωνσταντίνα", "UTF-8");
cd.setTransactionDescription(dataStr1);
答案 0 :(得分:1)
你真的应该尝试从点到点制作UTF-8。
对数据库和表使用适当的unicode感知排序规则,即使已经给出db default,我也总是给每个表。这个答案有很多mysql + java以及servlet问题,但它们应该回答我们在开发支持unicode的java应用程序时需要知道的大多数问题。
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
maxActive="10" maxIdle="2" maxWait="10000"
username="myuid" password="mypwd"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8"
validationQuery="SELECT 1"
/>
使用jdbc连接字符串进行unicode转换。
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
useBodyEncodingForURI="true"
/>
强制Tomcat对GET和POST参数字符串使用content-type charset,因此对http和https连接器应用useBodyEncodingForURI属性(tomcat / conf / server.xml文件)。
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException { doPost(req, res); }
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException {
if (req.getCharacterEncoding() == null)
req.setCharacterEncoding("UTF-8");
String value = request.getParameter("fieldName");
...
}
在每个servlet页面的开头,确保Tomcat解析器请求参数为utf-8。您需要在读取参数之前调用setCharacterEncoding,否则为时已晚。大多数Web浏览器不发送内容类型的charset属性,因此servlet引擎可能会猜错。
contentType
小心.jsp页面不要插入一个空的前导whitechars或者调用setCharacterEncoding可能为时已晚,看看我如何将标记标记放在每一行的末尾以避免任何whitechars,以及html元素如何从第一行开始线。 Jsp标记pageEncoding
转到http响应,<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@
taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %><%@
page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
import="java.util.*,
java.io.*
"
%><%
if (req.getCharacterEncoding() == null)
request.setCharacterEncoding("UTF-8");
String param1 = request.getParameter("fieldName");
%><!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Page Title</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="keywords" content="some,fine,keywords" />
</head>
<body>
your html content goes here.... <%= param1 %>
</body>
</html>
表示文件如何存储在磁盘中。如果您只有ISO-8859-15文本编辑器,并且不在jsp页面中硬编码i18n字母,您可以选择正确的iso * pageEncoding。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@
page contentType="text/xml; charset=UTF-8" pageEncoding="ISO-8859-1"
import="java.util.*,
java.io.*
"
%><%
// MyBean has getId() and getName() getters
List<MyBean> items = new ArrayList<MyBean>();
items.add( new MyBean(1, "first") );
items.add( new MyBean(2, "second") );
items.add( new MyBean(3, "third") );
pageContext.setAttribute("items", items);
%><?xml version="1.0" encoding="UTF-8"?>
<mydoc>
<c:forEach var="item" items="${items}">
<item>
<id>${item.id}</id>
<name>${item.name}</name>
</item>
</c:forEach>
</mydoc>
在jsp页面中创建xml文档,您需要编写xml标题而不需要引导whitechars或换行符。了解scriptlet endtag和xml标头是如何在同一行中的。这就是嵌入式jsp代码必须始终考虑的内容,无辜的领先whitechar可能会破坏格式良好的回复。
public class RazorPreCompilation : RazorPreCompileModule
{
public RazorPreCompilation(IServiceProvider provider) : base(provider)
{
this.GenerateSymbols = true;
}
}
答案 1 :(得分:0)
Reasone because this happens is wrong encoding in JavaClass. Also i advice you to check your MySQL database encoding.
[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
Check this db-serverSide params
character_set_results
character_set_connection
character_set_client