我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > JSP页面下的Ajax乱码问题解决方法
总共48087条微博

动态微博

查看: 1344|回复: 0

JSP页面下的Ajax乱码问题解决方法

[复制链接]

29

主题

5

听众

183

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-07-28 19:38:34 |只看该作者 |倒序浏览
AJAX传递中文字符串时必须把中文字符串编码成unicode,一般会用到JS的自带函数escape().不过找到了更好的函数来确决中文字符转换成unicode编码的函数
/ J) l8 K+ a+ u8 ? 3 r# m! X0 W: W) a2 `
function uniencode(text)   ! w- B/ i# ?5 P8 N7 G
{   
; ?) O" ]4 H$ L. |( ?0 ]; U' D    text = escape(text.toString()).replace(/\+/g, "%2B");   . x7 |4 W: ?8 m. h
    var matches = text.match(/(%([0-9A-F]{2}))/gi);   & _4 E4 g7 E3 j5 G( N, c" Y8 P' b4 v
    if (matches)   
! R$ N8 A$ [9 C6 Y( @    {   $ k6 }, [. E% G0 z* J
        for (var matchid = 0; matchid < matches.length; matchid++)   
9 J9 j0 x& G  ?4 Z' I) N        {   
/ _. g5 j" u; t5 D9 u! q            var code = matches[matchid].substring(1,3);   + A! e2 d: A% i2 A8 n; `6 u' q5 w
            if (parseInt(code, 16) >= 128)   * }2 ^- ^3 x: H  o
            {   7 I7 h& b  D* k7 ^' [
                text = text.replace(matches[matchid], '%u00' + code);   : _. Q5 O7 s+ Q0 n0 J$ b' s# L& c
            }   7 T4 a$ G9 v& n4 o7 D! g; q5 ?
        }   
$ u4 N4 I. c# _* H    }   
* _1 ^( o7 v  F    text = text.replace('%25', '%u0025');   
4 ^/ I6 ?+ t9 ]# p  V    # ?1 N9 h: \3 ~' R( o) g
    return text;   5 j0 A# h( P7 G0 B$ C
}
$ m. p8 [8 g8 n ( h4 n$ J3 m5 Q' E# I
当然服务器端要对编码过的字符串进行第二次转码.把字符串转换成UTF-8编码.' [3 P$ l$ c; J6 z

/ c, {6 E1 T1 _function convert_int_to_utf8($intval)   
2 I; V4 x1 ^+ J& V3 a2 f{   ( }% y* ]* B# W! M. Y1 b
    $intvalintval = intval($intval);   7 z- ^  D8 b2 }- R% z2 |
    switch ($intval)   
: F2 }6 K1 U) i7 w3 D4 E3 I    {   
2 [7 y# @* I( ~" o8 Q        // 1 byte, 7 bits   ( Y  [+ B6 V4 t! v
        case 0:   
5 f" Z% M2 L3 y- F; w            return chr(0);   # ]' i: C$ t: U/ N/ r$ ?" H, ~* F
        case ($intval & 0x7F):   
) ~& j6 O, ^" E( `# c$ q, V6 G# u; }0 ^. U            return chr($intval);   1 c  M( Z/ L& E2 O# H
   
( E9 x3 f6 S2 F/ s        // 2 bytes, 11 bits   
: D8 ^" f6 Y2 m( G/ b. Y        case ($intval & 0x7FF):   4 o& N5 Q$ x. N- k* U) e1 ?- D3 e- n1 `
            return chr(0xC0 | (($intval >> 6) & 0x1F)) .   . l) P' F/ O0 l( }1 v
                chr(0x80 | ($intval & 0x3F));   * q' x' Z0 L- s0 @- x( f# ?( u; `
   
) V/ j9 n, e' S  b4 `        // 3 bytes, 16 bits   4 C0 m  h3 \( \/ B+ [; _0 |
        case ($intval & 0xFFFF):   
7 P: [5 D/ m2 [. ]+ `% t& W            return chr(0xE0 | (($intval >> 12) & 0x0F)) .   ( }4 I4 \: ]6 w2 a- y1 P9 _
                chr(0x80 | (($intval >> 6) & 0x3F)) .   9 M  |6 I2 \  `& q3 I
                chr (0x80 | ($intval & 0x3F));   , }6 h- T# p  E" C$ S4 r
    7 d) j& B, Q1 f9 {% e
        // 4 bytes, 21 bits   5 Y% F4 w$ h# I- m) L- i
        case ($intval & 0x1FFFFF):   
/ P' j& F, B9 G0 n/ }7 X- I            return chr(0xF0 | ($intval >> 18)) .   6 g) \) c8 T! S- B
                chr(0x80 | (($intval >> 12) & 0x3F)) .   
: V2 G3 p8 h3 t, j* G- K( n. @                chr(0x80 | (($intval >> 6) & 0x3F)) .   9 ]1 @1 u& P/ P) V9 Y
                chr(0x80 | ($intval & 0x3F));   : m3 g# A0 R( ?3 s
    }   + b5 `8 g# [" J% l8 J6 S6 b) u
}
6 P1 }& Y, k9 n7 W! ?

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表