Кириллический ввод получен как Mojibake

Я разрабатываю веб-приложение, используя PrimeFaces и postgresql.

У меня есть несколько форм, связанных с базой данных. В проекте нужно работать с кириллическими символами. Поэтому, когда я заполняю некоторые символы в текстовом поле, кириллица в порядке, но когда я нажимаю кнопку и форма перезагружается, я вижу некоторые символы мусора.

Я использую tomcat в качестве сервера и разрабатываю приложение локально на своем компьютере.

Вот мой файлfaces-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig
<?xml version="1.0" encoding="UTF-8"?>
2.xsd" version="2.2"> <application> <message-bundle> bg_messages </message-bundle> <locale-config> <default-locale>bg_BG</default-locale> <supported-locale>bg</supported-locale> </locale-config> </application> </faces-config>

На страницах xhtml у меня есть

<?xml version="1.0" encoding="UTF-8"?>

С базой данных все в порядке, потому что, когда я пытаюсь добавить некоторые символы кириллицы вручную, они работают. У меня также есть автозаполнение на одной из страниц, и когда я вручную добавляю некоторые данные на кириллице в базу данных, а затем пробую автозаполнение, оно работает нормально.

Вот одна из моих страниц:

<h:body>
    <h1>Вход</h1>
    <h:form>

        <h:outputText value="Потребителско име: " />
        <p:inputText value="#{USER.username}" />

        <br />
        <br />
        <h:outputText value="Парола: " />
        <p:password id="nonFeedback" value="#{USER.password}" />

        <br />
        <br />


        <h:commandButton value="Вход" action="#{USER.login}" target="_self" />



    </h:form>

</h:body>

Поэтому, когда я помещаю некоторые кириллические данные в

<p:inputText value="#{USER.username}" />

а потом нажимаю кнопку получаю фигню странные символы. То же самое и с моей регистрационной формой. Когда я заполняю данные в форму и снова отправляю ее, отображаются странные символы, и они сохраняются в базе данных вместо реальных правильных данных.

Вот моя регистрационная форма:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">

<h:head>

 <title>Home | E-Shopper</title>
    <h:outputStylesheet library="css" name="bootstrap.min.css" />
    <h:outputStylesheet library="css" name="font-awesome.min.css" />
    <h:outputStylesheet library="css" name="prettyPhoto.css" />
    <h:outputStylesheet library="css" name="price-range.css" />
    <h:outputStylesheet library="css" name="animate.css" />
    <h:outputStylesheet library="css" name="main.css" />
    <h:outputStylesheet library="css" name="responsive.css" />



    <h:outputScript library="js" name="bootstrap.min.js" />
    <h:outputScript library="js" name="jquery.scrollUp.min.js" />
    <h:outputScript library="js" name="price-range.js" />
    <h:outputScript library="js" name="jquery.prettyPhoto.js" />
    <h:outputScript library="js" name="main.js" />






    <h:link rel="shortcut icon" href="images/ico/favicon.ico"></h:link>
   <h:link rel="apple-touch-icon-precomposed" sizes="144x144" href="images/ico/apple-touch-icon-144-precomposed.png"></h:link>
   <h:link rel="apple-touch-icon-precomposed" sizes="114x114" href="images/ico/apple-touch-icon-114-precomposed.png"></h:link>
    <h:link rel="apple-touch-icon-precomposed" sizes="72x72" href="images/ico/apple-touch-icon-72-precomposed.png"></h:link>
   <h:link rel="apple-touch-icon-precomposed" href="images/ico/apple-touch-icon-57-precomposed.png"></h:link>



</h:head>
<h:body>

<div id="main_container_reg">

    <h1 class="reg_title">Регистрация</h1>


 <h:form>



<h:outputLabel styleClass="labels_reg" for="name" value="Име:  " />
<p:inputText styleClass="fields_reg" id="name" value="#{USER.name}"/>
<br/><br/>

<h:outputLabel styleClass="labels_reg" for="lastname" value="Фамилия:  " />
<p:inputText styleClass="fields_reg" id="lastname" value="#{USER.surname}" />
<br/><br/>
<h:outputLabel styleClass="labels_reg" for="username" value="Потребителско име: * " />
<p:inputText styleClass="fields_reg" id="username" required="true" value="#{USER.username}"  />


    <h:panelGrid styleClass="pass_reg" columns="2" id="matchGrid" >                  
        <h:outputLabel styleClass="labels_reg" for="password" value="Парола: *" />
        <p:password styleClass="fields_reg" id="password" match="pass_conf" label="Парола" required="true" value="#{USER.password}" />

        <h:outputLabel styleClass="labels_reg" for="pass_conf" value="Потвърди парола: *" />
        <p:password styleClass="fields_reg" id="pass_conf" value="EditorBean" label="полето за потвърждение" required="true" />
    </h:panelGrid>

 <br/>
<h:outputLabel styleClass="labels_reg" for="email" value="Електронна поща: * " />
<p:inputText styleClass="fields_reg" id="email" required="true" value="#{USER.email}" />
 <br/><br/>
<h:outputLabel styleClass="labels_reg" for="phone" value="Телефон: " />
<p:inputText styleClass="fields_reg" id="phone" value="#{USER.phone}"  />


<h:panelGrid styleClass="user_type" columns="2" style="margin-bottom:10px" >
        <p:outputLabel  value="Тип потребител" />
        <br/>
   <p:selectOneRadio id="data" binding="#{yesOrNo}" required="true" value="No">
   <f:selectItem itemValue="No"  itemLabel="Частно Лице" />
   <f:selectItem itemValue="Yes" itemLabel="Фирма" />
   <p:ajax update="campany_name" />
   <p:ajax update="city" />
   <p:ajax update="street" /> 
   <p:ajax update="street_number" />
   <p:ajax update="zip" />
    <p:ajax update="upload" />
</p:selectOneRadio>

    </h:panelGrid>


<h:outputLabel styleClass="labels_reg" for="company_name" value="Име на фирма: "  />
<p:inputText styleClass="fields_reg" value="#{USER.companyName}"  id="campany_name" disabled="#{yesOrNo.value != 'Yes'}" />
 <br/> <br/>

<h3 style="margin:0 0 0 15px;">Адрес: </h3>
<br/>
<h:outputLabel  styleClass="labels_reg" for="city" value="Град: "  />
<p:inputText styleClass="fields_reg" value="#{USER.city}" id="city" disabled="#{yesOrNo.value != 'Yes'}" />
<br/><br/>
<h:outputLabel styleClass="labels_reg" for="street" value="Улица: "  />
<p:inputText styleClass="fields_reg" value="#{USER.street}" id="street" disabled="#{yesOrNo.value != 'Yes'}" />
<br/><br/>
<h:outputLabel styleClass="labels_reg" for="street_number" value="Номер на Улица: "  />
<p:inputText styleClass="fields_reg" value="#{USER.streetNumber}"  id="street_number" disabled="#{yesOrNo.value != 'Yes'}" />
<br/><br/>
<h:outputLabel styleClass="labels_reg" for="zip" value="Пощенски код: "  />
<p:inputText styleClass="fields_reg" value="#{USER.zip}" id="zip" disabled="#{yesOrNo.value != 'Yes'}" />

<br/> <br/>

<p:messages id="messages" showDetail="true" autoUpdate="true" />
        <p:fileUpload fileUploadListener="#{USER.getImageURL}"
            allowTypes="/(\.|\/)(gif|jpe?g|png)$/" sizeLimit="100000"
            description="Select Images" disabled="#{yesOrNo.value != 'Yes'}"
            id="upload" />

        <br />
        <br />
        <h:form enctype="multipart/form-data">
            <p:growl id="messages" showDetail="true" />





            <p:commandButton styleClass="reg_button"  action="#{USER.addUser}" value="Регистрация" ajax="false"
                disabled="false" />
            <br />
            <br />
        </h:form>

    </h:form>

</div>


</h:body>
</html>

person Berchev    schedule 09.05.2015    source источник
comment
Вот результат: ???µ???µ???µ?????? когда делать System.out.println(user.getName()); и заполните кириллические символы в поле имени   -  person Berchev    schedule 09.05.2015
comment
Итак, я внес изменения в рабочую область на UTF-8 и в свойствах проекта, но все равно не получаю кириллический контент и получаю следующее предупреждение V 09, 2015 21:05:06 org.apache.tomcat .util.digester.SetPropertiesRule begin ПРЕДУПРЕЖДЕНИЕ: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Установка свойства «source» на «org.eclipse.jst.jee.server:Hotels» не нашла соответствующего свойства. Но есть изменение и в выводе теперь в консоле получаю не просто так ????? отметки, Да, я использую Eclipse Mars   -  person Berchev    schedule 09.05.2015
comment
Тип содержимого для register.xhtml — text/html; charset=UTF-8.   -  person Berchev    schedule 09.05.2015
comment
Я использую Primefaces с самого начала. Как я могу проверить, есть ли другой фильтр, который работает раньше?   -  person Berchev    schedule 09.05.2015
comment
Ой? Ну, тогда это применимо как дубликат stackoverflow.com/a/9839362, верно?   -  person BalusC    schedule 09.05.2015
comment
Я думаю, что это другое. Праймфейсы не обновлял, использую 5.1 с самого начала проекта. Я также использую tomcat 8, а не стеклянную рыбу. Насколько я понимаю, если я установлю фильтр или настрою кодировку сервера, возможно, проблема решит... но я не знаю, где установить этот фильтр и как его установить. В файле server.xml у меня есть <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"/>   -  person Berchev    schedule 09.05.2015
comment
Просто поместите этот класс в исходную папку Java. Эта конфигурация Tomcat применяется только к запросам GET, а не к запросам POST (фильтр).   -  person BalusC    schedule 10.05.2015
comment
хорошо, я создал новый класс для кодировки, но я получаю сообщение об ошибке в аннотации @WebFilter("/*") вот что я импортировал: package encoding; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;   -  person Berchev    schedule 10.05.2015
comment
Я обнаружил, что проблема была в моей версии API сервлета, это была версия 2.5, и поэтому такой аннотации не было, поскольку они доступны после версии 3, как я читал в Интернете. Итак, я поставил правильную версию, создал фильтр, и теперь он работает как часы. Если вы хотите, просто опубликуйте ответ на вопрос, чтобы я мог отметить его как лучший ответ. Миллион спасибо за помощь   -  person Berchev    schedule 10.05.2015