我有一個JSP
頁面,其頁面編碼爲ISO-8859-1
。此JSP頁面位於問題答案博客中。我希望在Q/A發佈期間包含特殊字符。JSP頁面中的UTF-8編碼
問題是JSP不支持UTF-8
編碼,即使我已將其從ISO-8859-1
更改爲UTF-8
。這些字符(~
,%
,&
,+
)出現問題。當我單獨發佈這些字符或與任何字符的組合發佈這些字符時,storinh null
在數據庫中,當我在發佈應用程序時刪除這些字符時它工作正常。
任何人都可以提出一些解決方案嗎?
我有一個JSP
頁面,其頁面編碼爲ISO-8859-1
。此JSP頁面位於問題答案博客中。我希望在Q/A發佈期間包含特殊字符。JSP頁面中的UTF-8編碼
問題是JSP不支持UTF-8
編碼,即使我已將其從ISO-8859-1
更改爲UTF-8
。這些字符(~
,%
,&
,+
)出現問題。當我單獨發佈這些字符或與任何字符的組合發佈這些字符時,storinh null
在數據庫中,當我在發佈應用程序時刪除這些字符時它工作正常。
任何人都可以提出一些解決方案嗎?
這是html中的特殊字符。你爲什麼不把它編碼? 檢查出來:http://www.degraeve.com/reference/specialcharacters.php
你必須確保該文件被保存與 UTF-8編碼。 你可以用幾個純文本編輯器來做到這一點。使用Notepad ++,即可以在菜單Encoding
- >Encode in UTF-8
中進行選擇。即使使用Windows'記事本(Save As
- >編碼UTF-8),您也可以做到這一點。 如果您使用的是Eclipse,您可以在文件的屬性中進行設置。
另外,檢查問題是否是你必須轉義這些字符。你的問題並不奇怪,因爲其中一個字符是&
。
您應該使用相同的編碼對應用程序的所有層以避免此問題。它是有用的添加filter設置編碼:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws ServletException
{
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
要只設置編碼在JSP頁面中,該行添加到他們:
<%@ page contentType="text/html; charset=UTF-8" %>
配置數據庫使用相同的字符編碼也是如此。
如果你需要轉換字符串的編碼見:
我不會推薦給HTML編碼的文本存儲在數據庫中。例如,如果您需要生成PDF(或HTML以外的其他文件),則需要先轉換HTML編碼。
你能解釋一點點,因爲我是這個問題的新手。 喜歡在哪裏添加過濾器。 – Shailendra
有關詳細信息和示例,請參閱http://stackoverflow.com/tags/servlet-filters/info –
這是一個常見問題。
要解決的一個最簡單的方法是檢查特殊字符是否到達動作層內部,然後修改java代碼中的特殊字符。
如果您可以查看在行動或這種性格你的選擇(如商業層)的任何其他Java層,只要用相應的使用StringEscapeUtils.html#escapeHtml
做後逃逸HTML字符替換的字符。使用新字符串保存到數據庫。
以及我得到你的soloution,但我無法獲得業務層本身的特殊字符。在進入java類之前,它在jsp中迷路了。 – Shailendra
@ShailendraDubey嗯日期應該是在形式和到達行動層,你可以仔細檢查。如果它不來,你可以把代碼或一些示例代碼的一些細節(不包括整個JSP)。 –
完整的JSP標籤應該是這樣的,介意的pageEncoding太:與編碼
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
一些舊的瀏覽器搞亂了。您可以使用HTML標籤
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
而且該文件應該被記錄在UTF-8格式,如果你使用的是Eclipse上的文件 - >屬性 - >查看左鍵單擊 - >文本文件編碼。
這個線程可以幫助您: Passing request parameters as UTF-8 encoded strings
基本上是:
request.setCharacterEncoding("UTF-8");
String login = request.getParameter("login");
String password = request.getParameter("password");
或者你在JSP文件中使用JavaScript:
var userInput = $("#myInput").val();
var encodedUserInput = encodeURIComponent(userInput);
$("#hiddenImput").val(encodedUserInput);
,並在課後恢復:
String parameter = URLDecoder.decode(request.getParameter("hiddenImput"), "UTF-8");
此外,我在server.xml的標記_
此解決方案很好,但您可以在web中添加全局配置。 xml通過添加CharacterEncodingFilter,只需按照此鏈接[https://stackoverflow.com/a/30276333](https://stackoverflow.com/a/30276333) –
我還有一個問題顯示像「ṀŮ」的charectors。我在web.xml中添加了以下內容。
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
這解決了頁面中除header以外的問題。試過很多方法來解決這個問題,沒有任何工作在我的情況。標題問題是從另一個jsp中包含標題jsp頁面。所以給編碼輸入,並解決了我的問題。
<c:import url="/Header1.jsp" charEncoding="UTF-8"/>
感謝
感謝您的這種提示。這也是需要的,似乎避免在每個jsp文件中寫入<%@ page pageEncoding =「UTF-8」%>(在我的情況下,只有在兩次重新啓動Tomcat和Browser-緩存而不是直接...) – leole
我不得不使用特殊字符作爲分隔符JSP同樣的問題。當特殊字符發佈到servlet時,他們都搞砸了。我用下面的轉換來解決這個問題:
String str = new String (request.getParameter("string").getBytes ("iso-8859-1"), "UTF-8");
我添加這個shell腳本轉換JSP文件從IS
#!/bin/sh
###############################################
## this script file must be placed in the parent
## folder of the to folders "in" and "out"
## in contain the input jsp files
## out will containt the generated jsp files
##
###############################################
find in/ -name *.jsp |
while read line; do
outpath=`echo $line | sed -e 's/in/out/'` ;
parentdir=`echo $outpath | sed -e 's/[^\/]*\.jsp$//'` ;
mkdir -p $parentdir
echo $outpath ;
iconv -t UTF-8 -f ISO-8859-1 -o $outpath $line ;
done
我使用的編碼過濾器,解決了我所有的編碼問題...
package com.dina.filter;
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;
/**
*
* @author DINANATH
*/
public class EncodingFilter implements Filter {
private String encoding = "utf-8";
public void doFilter(ServletRequest request,ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
// response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding(encoding);
filterChain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
String encodingParam = filterConfig.getInitParameter("encoding");
if (encodingParam != null) {
encoding = encodingParam;
}
}
public void destroy() {
// nothing todo
}
}
在web.xml
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>
com.dina.filter.EncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
感謝您的所有提示。使用Tomcat8我還添加了一個像@Jasper de Vries所寫的過濾器。但在現在的新Tomcats中,已經實現了一個過濾器,可以在Tomcat Web中使用resp。xml:
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<async-supported>true</async-supported>
</filter>
...
<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
和所有其他人一樣發佈;我將URIEncoding="UTF-8"
添加到Apache中的Tomcat連接器。這也有幫助。
重要的是說,那Eclipse的(如果你用這個)有它的web.xml的副本,並覆蓋Tomcat的設置,因爲它是在這裏解釋:Broken UTF-8 URI Encoding in JSPs
表演,請接收數據的代碼,如何你把它存儲到數據庫,你如何將它從數據庫中顯示到jsp – MaVRoSCy
這是一個很長的代碼,我不能粘貼在這裏,但我可以告訴你的流量。用戶發佈來自jsp頁面(a.jsp)的問題的答案。我將所有的值傳遞給tester.js文件(提交時),然後這些值將隱藏jsp頁面,然後我調用java方法來發布數據。如果用戶正在發佈(&&&&&&&),那麼值將到達tester.js文件,但在將值發送到隱藏的jsp頁面後,所有值都將變爲null(僅在上面描述特殊字符休息的情況下才能正常工作)。 – Shailendra
請發送tester.js的方法來處理提交 – MaVRoSCy