❶ js中文亂碼,我的js是GBK編碼,html<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
希望在前台使用gbk,就可以讓後台輸出的內容編碼為gbk ,比如php中是用iconv()函數。
❷ js中有沒有把十六進制數轉換成Unicode字元的函數
根本不用你編寫十六進制轉換unicode
document.writeln(escape("你好"))
再給你幾個函數encodeURI,encodeURIComponent unescape 方法
這些方法足夠你完成版中文參數傳權遞
❸ 如何使用encodeuricomponent 在js中編碼在java中解碼
地址欄中出現漢字的情況有兩種,一種是漢字出現在URL的路徑部分,一種是漢字出現在URL的傳參的部分,第二種情況的時候必須採用編碼後傳參,接受時解碼的方式完成傳參。js中編碼有escape(),encodeURI(),encodeURIComponent()三個常用的方法,escape()常常用在提交頁面和處理頁面的編碼格式相同的情況下(比如它們都是GB2312),encodeURI()和encodeURIComponent()的用法基本相同,區別在於encodeURIComponent()也對"?"等特殊字元進行編碼。
一開始遇到中文參數的時候,使用encodeURI()進行了一遍編碼,傳過去後,發現解碼出現問題,於是想到可能是編碼方法使用錯誤,於是使用escape()方法,這時發現解碼時拋出isHexDigit異常。藉助網路搜索isHexDigit異常,
發現原來,是escape()方法造成了異常,同時了解了瀏覽器傳遞地址的一些原理,在瀏覽器地址欄里,瀏覽器認為%是個轉義字元,瀏覽器會把%與%之間的編碼,兩位兩位取出後進行解碼,然後再傳遞給處理頁面,
然後由處理頁面進行再次解碼。由此我想到一直使用encodeURI方法是正確的,只是需要使用兩次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文編碼成%xy的格式,
第二次是對%xy中的%進行編碼,%籂亥焚酵蒔寂鋒檄福漏編碼成%。整個傳參過程大體應該是:提交頁面使用encodeURI(encodeURI("中文"))編碼,把最後的編碼結果%xy傳遞給處理頁面的過程中,瀏覽器獲取URL地址
(注意openModelDialog方法,瀏覽器獲取不到參數編碼)後解碼成%xy,然後把%xy傳遞給處理頁面,處理頁面使用URLDecoder.decode(request.getParameter("參數名"),"UTF-8");完成解碼。
總結:1、漢字出現在URL路徑部分的時候不需要編碼解碼;
❹ 如何用js同時兼容GB2312編碼與UTF-8編碼
然而你這並不是寫JS的問題, 而是Server端編碼沒寫好
但既然你在用JS就可以無視編碼了
所有的字元都可以被\uxxxx替代
比如
'測試' == '\u6e2c\u8a66'
甚至你可以這麽寫代碼
\u0061\u006c\u0065\u0072\u0074('\u6e2c\u8a66')
具體到如何得到這個串, 方法很多, 而且JS自身就能做到, 比如
'測試'.replace(/[\u0100-\uffff]/g,function(S)
{
return '\\' + escape(S).substr(1)
})
所以說你在發布時就把字元串轉換好然後就沒有什麽憂慮了
❺ 求教JS中使用escape將漢字轉換為ascii的好處
escape()和unescape()是一對編碼解碼函數,一般用於URL中非ASCII字元的編碼和解碼!
如:escape("&")返回%26,unescape("%26")返回&,都用十六進制編碼!
這個函數在AJAX技術應用中發送中文字串很有用,特別是AJAX向GB2312編碼的ASP程序發送中文時很有用!如:要將name="東方不敗"發給red.asp(asp為gb2312如果為UTF-8的話就不用編碼)前先做escape(name),這樣發到red.asp時中文就不會亂碼,指接用request接收就行了!
❻ JS對URL字元串進行編碼/解碼分析
雖然escape()、encodeURI()、encodeURIComponent()三種方法都能對一些影響URL完整性的特殊
字元進行過濾。但後兩者是將字元串轉換為UTF-8的方式來傳輸,解決了頁面編碼不一至導致的亂碼問
題。例如:發送頁與接受頁的編碼格式(Charset)不一致(假設發送頁面是GB2312而接收頁面編碼是
UTF-8),使用escape()轉換傳輸中文字串就會出現亂碼問題。
以下是JS下對URL進行編/解碼的各種方法:
escape
方法:返回一個可在所有計算機上讀取的編碼
String
對象。
function
escape(charString
:
String)
:
String
不會被此方法編碼的字元:
@
*
/
+
說明:escape
方法返回一個包含
charstring
內容的字元串值(Unicode
格式)。所有空格、標點、
重音符號以及任何其他非
ASCII
字元都用
%xx
編碼替換,其中
xx
等於表示該字元的十六進制數。
例如,空格返回為「%20」。(字元值大於
255
的字元以
%uxxxx
格式存儲。)
注意:escape
方法不能用來對「統一資源標識符」(URI)
進行編碼。對其編碼應使用
encodeURI
和
encodeURIComponent
方法。
encodeURI
方法:返回編碼為有效的統一資源標識符
(URI)
的字元串。
function
encodeURI(URIString
:
String)
:
String
不會被此方法編碼的字元:!
@
#
$
&
*
(
)
=
:
/
;
?
+
'
說明:encodeURI
方法返回一個已編碼的
URI。如果將編碼結果傳遞給
decodeURI,則將返回初始的
字元串。encodeURI
不對下列字元進行編碼:「:」、「/」、「;」和「?」。請使用
encodeURIComponent
對這些字元進行編碼。
encodeURIComponent
方法:返回編碼為統一資源標識符
(URI)
的有效組件的字元串。
function
encodeURIComponent(encodedURIString
:
String)
:
String
不會被此方法編碼的字元:!
*
(
)
'
說明:encodeURIComponent
方法返回一個已編碼的
URI。如果將編碼結果傳遞給
decodeURIComponent,則將返回初始的字元串。因為
encodeURIComponent
方法將對所有字元編碼,
請注意,如果該字元串代表一個路徑,例如
/folder1/folder2/default.html,則其中的斜杠也將被
編碼,這樣,當該字元串作為請求發送到
Web
伺服器時它將是無效的。如果字元串中包含多個
URI
組件,請使用
encodeURI
方法進行編碼。
unescape
方法:從用
escape
方法編碼的
String
對象中返回已解碼的字元串。
function
unescape(charString
:
String)
:
String
說明:unescape
方法返回一個包含
charstring
內容的字元串值。所有以
%xx
十六進制形式編碼的
字元都用
ASCII
字元集當中等效的字元代替。(以
%uxxxx
格式(Unicode
字元)編碼的字元用十六
進制編碼
xxxx
的
Unicode
字元代替。)
注意:unescape
方法不應用於解碼「統一資源標識符」(URI)。請改用
decodeURI
和
decodeURIComponent
方法。
decodeURI
方法:返回一個已編碼的統一資源標識符
(URI)
的非編碼形式。
function
decodeURI(URIstring
:
String)
:
String
decodeURIComponent
方法:返回統一資源標識符
(URI)
的一個已編碼組件的非編碼形式。
function
decodeURIComponent(encodedURIString
:
String)
:
String
BTW:C#中對URL編碼的方法。。。
編碼:Server.UrlEncode(string)
解碼:Server.UrlDecode(string)
前面三種客戶端編碼都可以用這個方法在後台解碼。
❼ 在jsp中用js接收request中的值,中文亂碼
java web項目中文亂碼一般修改以下幾個地方即可解決問題:
1、設置jsp頁面的編碼格式
2、在web.xml中配置請求攔截器來轉換數據編碼格式
3、設置web容器(比如:tomcat等)的默認編碼格式
4、設置資料庫的編碼格式
另外,需要注意的是post和get請求方式提交數據。get方式請求不會走在在web.xml中配置的請求攔截器,所以url中盡量不要帶有中文,或使用post的請求方式。
希望對你有所幫助!
❽ js頁面是gb2312編碼,怎麼解決jQuery.ajax中文亂碼問題(不能轉換頁面編碼,否則會導致更多問題)
前端:
var str = "張三";
$.ajax({
type:"",
url:"who.action",
data:{"name",encodeURI(encodeURI(str))},
success: ,
dataType
}
伺服器端:
String name = request.getParameter("name");
name = java.net.URLDecoder.decode("name", "gb2312");
關鍵是你要發送的數據要通過兩層的enCodeURI()函數轉換。