0

My problem is UTF-8 data submitted correctly sometimes but sometimes the strings are broken.

When submitted correctly it looks like this: আনোয়ার/好/我是一個好男孩 but in times of incorrect form submit it looks like: à¦à¦¨à§à§à¦¾à¦°

Database Configuration for UTF-8 :

In MySql : Charset: utf-8 collation: utf8_general_ci

My application.properties file:

jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url =jdbc:mysql://localhost:3306/icdb?useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8_general_ci&characterSetResults=utf8 jdbc.username = root
jdbc.password =password
hibernate.dialect = org.hibernate.dialect.MySQLDialect
hibernate.show_sql = true
hibernate.format_sql = true

This is my SpringMvcInitializer class:

public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 @Override
public void onStartup(ServletContext servletContext) throws ServletException {
    super.onStartup(servletContext);
    FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding-filter", new CharacterEncodingFilter());
    encodingFilter.setInitParameter("encoding", "UTF-8");
    encodingFilter.setInitParameter("forceEncoding", "true");
    encodingFilter.addMappingForUrlPatterns(null, false, "/*");
}

In Controller:

@RequestMapping(value = "/saveNewOrder", produces = {"application/json; charset=UTF-8"}, method = RequestMethod.POST)
public String saveNewOrder(HttpServletRequest request, @Valid CatMenuSelection catMenuSelection, CatMenuSelectionExtra catMenuSelectionExtra, Model m, BindingResult result)

The JSP file looks like:

   <%@page contentType="text/html" pageEncoding="UTF-8"%>
<meta charset="utf-8">  <meta http-equiv="X-UA-Compatible" content="IE=edge">  
 <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">


<form:form action="saveNewOrder" method="post" modelAttribute="catMenuSelection" acceptCharset="UTF-8">
                            <table class="table">
                                <form:hidden name="iddd" path="id"/>
                                <div class="col-lg-12">
                                    <div class="form-group row">
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.people" /></label></div>
                                        <div class="col-lg-3">
                                            <form:input path="totalGuest" id="popleId"  class="col-lg-2 form-control "  style="width: 76px; height: 32px" required="true"/>
                                            <!--                                        <div class="col-lg-1">
                                            <%--<form:errors path="totalGuest" cssclass="error"></form:errors>--%>
                                        </div>-->
                                            <div class="col-lg-1">

                                               <select id="typeId" style="width: 76px; height: 25px" name="distributionType" required="true">
                                                <option value="V.I.P"><fmt:message key="catering.lalel.vip" /></option>
                                                <option value="Packet"><fmt:message key="catering.lalel.packet" /></option>
                                                <option value="Public"><fmt:message key="catering.lalel.public" /></option>
                                            </select>
                                            </div>
                                        </div>
                                            <!--                                            <div class="col-lg-1">
                                            <%--<form:errors path="distributionType" cssclass="error"></form:errors>--%>
                                        </div>-->
                                        <!--</div>-->
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.date" /></label></div>
                                        <div class="col-lg-3">
                                            <form:input path="occassionDate"  class="datepicker form-control" style="width: 170px" required="true"/>
                                        </div>
                                        <!--                                        <div class="col-lg-1">
                                        <%--<form:errors path="occassionDate" cssclass="error"></form:errors>--%>
                                    </div>-->
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.time" /></label></div>
                                        <div class="col-lg-3">
                                            <select name="occassionTime" style="width: 170px; height: 32px" required="true">
                                                <option value="Morning"><fmt:message key="catering.lalel.morning" /></option>
                                                <option value="Noon"><fmt:message key="catering.lalel.noon" /></option>
                                                <option value="Evening"><fmt:message key="catering.lalel.evening" /></option>
                                                <option value="Night"><fmt:message key="catering.lalel.night" /></option>
                                            </select>
                                        </div>
                                        <!--                                        <div class="col-lg-1">
                                        <%--<form:errors path="occassionTime" cssclass="error"></form:errors>--%>
                                    </div>-->
                                    </div>
                                    <div class="form-group row">
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.event" /></label></div>
                                        <div class="col-lg-3"><form:input path="occassion" class="form-control" style="width: 170px" required="true"/></div>

                                        <!--                                    <div class="col-lg-1"> 
                                        <%--<form:errors path="occassion" cssclass="error"></form:errors>--%>
                                    </div>-->
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.name" /></label></div>
                                        <div class="col-lg-3"><form:input path="customerName" class="form-control" style="width: 170px" required="true" /></div>
                                        <!--cusname-->
                                        <!--<div class="col-lg-1">
                                        <%--<form:errors path="customerName" cssclass="error"></form:errors>--%>
                                        </div>-->
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.place" /></label></div>
                                        <div class="col-lg-3"><form:input path="occassionPlace" class="form-control" style="width: 170px" required="true"/></div>
                                        <!--                                    <div class="col-lg-1"> 
                                        <%--<form:errors path="occassionPlace" cssclass="error"></form:errors>--%>
                                    </div>-->


                                    </div>
                                    <div class="form-group row">
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.vipprice" /></label></div>
                                        <div class="col-lg-3"><form:input path="guestPrice" id="vipPriceId" class="form-control " style="width: 170px" required="true"/></div>

                                        <!--                                    <div class="col-lg-1"> 
                                        <%--<form:errors path="guestPrice" cssclass="error"></form:errors>--%>
                                    </div>-->
                                        <div class="col-lg-1"><label ><fmt:message key="catering.lalel.packetprice" /></label></div>
                                        <div class="col-lg-3"><form:input path="driverPrice" id="packetPriceId" class="form-control" style="width: 170px" placeholder="Packet Price" required="true"/></div>

                                        <!--                                    <div class="col-lg-1"> 
                                        <%--<form:errors path="driverPrice" cssclass="error"></form:errors>--%>
                                    </div>-->
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.driver" /></label></div>
                                        <div class="col-lg-3"><form:input path="totalDriver" id="driverId" class="form-control " style="width: 170px" required="true"/></div>

                                        <!--                                    <div class="col-lg-1">
                                        <%--<form:errors path="totalDriver" cssclass="error"></form:errors>--%>
                                    </div>-->
                                    </div>
                                    <div class="form-group row">
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.grosstotal" /></label></div>
                                        <div class="col-lg-3"><form:input path="grossTotalAmnt" id="grossTotalId" class="form-control " style="width: 170px" required="true"/></div>
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.phone" /></label></div>
                                        <div class="col-lg-3"><form:input path="phoneNo" class="form-control" style="width: 170px" required="true" /></div>

                                        <!--                                    <div class="col-lg-1"> 
                                        <%--<form:errors path="phoneNo" cssclass="error"></form:errors>--%>
                                    </div>-->
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.address" /></label></div>
                                        <div class="col-lg-3"><form:input path="address" class="form-control" style="width: 170px" required="true"/></div>

                                        <!--                                    <div class="col-lg-1">
                                        <%--<form:errors path="address" cssclass="error"></form:errors>--%>
                                    </div>-->

                                    </div>

                                    <div class="form-group row">

                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.discount" /></label></div>
                                        <div class="col-lg-3"><form:input path="discount" class="form-control" style="width: 170px" /></div>
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.advancedpay" /></label></div>
                                        <div class="col-lg-3"><form:input path="advanceDeposit" class="form-control" style="width: 170px"/></div>
                                        <!--                                    <div class="col-lg-1">
                                        <%--<form:errors path="advanceDeposit" cssclass="error"></form:errors>--%>
                                    </div>-->
                                        <div class="col-lg-1"><label><fmt:message key="catering.lalel.comment" /></label></div>
                                        <div class="col-lg-3"><form:input path="mainRemarks" class="form-control" style="width: 170px"/></div>
                                        <form:errors path="mainRemarks" cssclass="error"></form:errors>
                                        </div>
                                    </div>

Please some one help me to find out the error of failing insertion of utf-8 data always and get the solution.

shibli049
  • 528
  • 12
  • 31

2 Answers2

1

I used the following code and it works.

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{ 
@Override
protected void configure(HttpSecurity http) throws Exception {

    CharacterEncodingFilter filter = new CharacterEncodingFilter();
    filter.setEncoding("UTF-8");
    filter.setForceEncoding(true);
    http.addFilterBefore(filter, CsrfFilter.class);}
  • So the problem is in your spring configuration, not in database configuration, your question is misleading. – shibli049 Aug 06 '17 at 06:37
0

So, your problem is not related to database configuration. But actually a spring configuration problem.

Then, try to add this <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> inside your <head> tag. And, try to change your FilterRegistration to this:

CharacterEncodingFilter ceFilter = new CharacterEncodingFilter();
ceFilter.setEncoding("UTF-8"); ceFilter.setForceEncoding(true);
FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding-filter", ceFilter);

as mentioned in the below comment. And also make sure, CharacterEncodingFilter is the first filter in your filter chain.

shibli049
  • 528
  • 12
  • 31
  • @shibli049I have added the above codes but problem still remains. Suddenly wrong characters inserts in the database. – RidwanulHaque Aug 03 '17 at 08:37
  • Can you please check, if the submitted form data is proper UTF-8 encoded String or not? Is it broken after database insertion or between form submit? – shibli049 Aug 03 '17 at 10:35
  • BTW, for init-sql property you can check this answer, https://stackoverflow.com/a/38794121/669265 – shibli049 Aug 03 '17 at 10:36
  • Form data is broken before insertion in the database. – RidwanulHaque Aug 03 '17 at 11:00
  • Then, try to add this `` in your `` tag. And, try to change your FilterRegistration to this: `CharacterEncodingFilter ceFilter = new CharacterEncodingFilter(); ceFilter.setEncoding("UTF-8"); ceFilter.setForceEncoding(true); FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding-filter", ceFilter);` – shibli049 Aug 03 '17 at 11:13
  • i used this code @Override public void onStartup(ServletContext servletContext) throws ServletException { super.onStartup(servletContext); CharacterEncodingFilter ceFilter = new CharacterEncodingFilter(); ceFilter.setEncoding("UTF-8"); ceFilter.setForceEncoding(true); FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding-filter", ceFilter); But non english data sometimes not inserts. – RidwanulHaque Aug 03 '17 at 11:39
  • I update my question in SpringMvcInitializer class. – RidwanulHaque Aug 03 '17 at 12:20