[英]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" />
問題的可能原因是什么?
還有一些額外的步驟可以嘗試:
...
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,則您的過濾器將自行轉換所有請求。
如果使用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.