簡體   English   中英

Java Servlet出現XML XPath utf-8錯誤?

[英]XML XPath utf-8 error with Java servlet?

我使用以下代碼讀取包含utf-8字符的xml文件:

InputStream inputStream = new FileInputStream(dataFile);
Reader reader = new InputStreamReader(inputStream, "UTF-8");

InputSource is = new InputSource(reader);
is.setEncoding("UTF-8");

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(is);
doc.getDocumentElement().normalize();

如果我在控制台Java應用程序中運行以上代碼,則一切都很好。 但是,如果我使用Tomcat 8在servlet / jsp中運行該代碼,那么我將丟失所有utf-8字符。 在我的servlet / jsp中,我已經做了:

response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");

在tomcat 8 server.xml文件中,我已經設置

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />

問題的可能原因是什么?

還有一些額外的步驟可以嘗試:

  1. 嘗試定義一個字符集過濾器類:

...

public void doFilter(
  ServletRequest request, 
  ServletResponse response, 
  FilterChain next) throws IOException, ServletException {
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html; charset=UTF-8");
    response.setCharacterEncoding("UTF-8");
    next.doFilter(request, response);
}

...

還將相關的過濾器映射添加到web.xml

<filter>
    <filter-name>CharsetFilter</filter-name>
    <filter-class>my.CharsetFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>CharsetFilter </filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

過濾器確保如果瀏覽器不使用UTF-8,則您的過濾器將自行轉換所有請求。

  1. 如果使用JSP,請在每頁的最上方添加以下行:

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

web.xml添加到您的web.xml

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

也可以將此<fmt:requestEncoding value="UTF-8" /> JSTL行添加到您的JSP代碼中是一種解決方案。

順便說一句,做完這些操作后,別忘了重新啟動Tomcat實例。

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM