查看: 20838|回复: 4

Java中Unicode编码汉字转化

[复制链接]

10

主题

52

帖子

458

积分

版主

Rank: 7Rank: 7Rank: 7

积分
458
sfy123home 发表于 2016-1-29 15:29:50 | 显示全部楼层 |阅读模式
很多人反应通过接口返回的结果中汉字为类似于[color=#333333][font=Helvetica,]"province":"\u8fbd\u5b81","city":"\u6c88\u9633"[/font][/color]% |* q. A: O9 l' O
[color=#333333][font=Helvetica,]这样的不是中文,自己写了个函数进行转化[/font][/color]
. h) Z% L( p5 `/ x[color=#333333][font=Helvetica,]核心函数如下:[/font][/color]) m2 Y9 l( f: E0 E; q5 u
[code] public static String decodeUnicode(String theString) {    6 v0 K! [8 L- z/ v+ A
  ! |2 N: w1 S: g4 l7 n! l6 [5 [
     char aChar;   
: s+ o% o5 {; j  Y  w5 w; d  2 I4 |4 a$ @4 h/ @6 }
      int len = theString.length();    & B5 m; D, o& P+ V2 e
  
) H* ?- K7 B  Z2 l/ E1 @; p+ {, [     StringBuffer outBuffer = new StringBuffer(len);    : |/ I7 O7 u6 r/ Z7 v% z
  
+ t7 a; w0 Q$ K- k     for (int x = 0; x < len;) {   
& B) Y0 t$ v1 d/ o% V; M' N: H  
0 f  y' W4 W, u, a      aChar = theString.charAt(x++);    7 ]+ a/ T! D" @; ^
  
0 J- y# l( Y. [; o      if (aChar == '\\') {    2 x0 Q5 H) ^4 {. u
  : I" S5 V3 R* Z" R2 {4 v
       aChar = theString.charAt(x++);    4 ?+ O5 b" o4 d+ |. A) }
  
& @9 V* A* r8 W, C" s       if (aChar == 'u') {   
, f" s% ~+ E) ^0 p  
! K! q9 {1 `# x6 N0 s+ U        // Read the xxxx    : i' k4 P* p; _0 a0 a" N8 x2 G
  6 |! \9 @" d2 U$ h; N
        int value = 0;   
- ^# L+ r3 g/ v+ O% v- P  9 k  Y) u4 {) y* o
        for (int i = 0; i < 4; i++) {    ) l# ?% P& P$ O7 S( H) t
  
% C) `& r5 z7 r% h         aChar = theString.charAt(x++);   
4 M, ?. y3 y0 e  
2 s( \* V- P" d2 p1 h         switch (aChar) {    " u0 s+ |7 o" W6 W
  
5 J6 I& n* c9 U         case '0':   
' p7 \) U6 n2 r1 V. `  
2 Z5 R* u8 U1 w         case '1':    8 S' y; A: X3 }( v0 f
  
* `$ ?6 P9 t4 w/ s8 W( k         case '2':   
* h) x% v9 E3 G  
" X, O# Q# A# ]% D( m0 s4 A- W         case '3':   
( F7 _+ `0 i( A  ?. ^  & `0 h& X6 l4 ]4 _& s1 B
        case '4':   
" W8 h) u1 `( y; s) J3 V9 L1 |  $ S1 |! l, D6 H( }" q6 B
         case '5':    - D: a) m5 K( P$ v1 k% ?; ^- |( r
  , j8 N$ ]- g0 Q( A
          case '6':    9 f( |. X) y2 X) N+ s
           case '7':    + k" n) k, t4 [9 F9 `% |6 {  ], {
           case '8':   
# k7 J# r, u( h7 t* R5 _# U           case '9':    " ^! S1 W1 B4 s
            value = (value << 4) + aChar - '0';   
+ [' x0 U6 c' |5 b( ^4 a2 [4 W            break;   
) B# a& n/ h! p6 ~* J- F7 J: k& ^           case 'a':    4 v+ M* q% i9 t9 L8 M6 r
           case 'b':   
- W: m" M2 ~. l9 D8 |           case 'c':   
8 I+ \+ u! E+ d. ]- |7 y           case 'd':    , C& q$ F$ Q+ g- u/ J% W1 c
           case 'e':   
8 a" u: d/ ~. G! P9 Y( L           case 'f':   
  t* K9 w6 X. f6 i6 Z( r            value = (value << 4) + 10 + aChar - 'a';    ' h3 q, e, |  `, D) z% c* e' I
           break;   
. j/ Z0 [$ e6 Z5 s           case 'A':   
  ?8 Z2 t3 b* O* r4 i. B& R5 q3 U           case 'B':   
5 ?! @% f8 w9 S; f5 o+ X           case 'C':    - H  p! H* D6 P4 c- z6 H' J
           case 'D':    ' X+ s6 X7 B7 V+ ^5 K2 w$ o
           case 'E':    % m' W7 e, n- g& S9 ]
           case 'F':    ( a+ J6 `2 |: R+ l  C! C
            value = (value << 4) + 10 + aChar - 'A';   
) [5 K- }  l6 m! M: s: M/ ]            break;    % v3 }% W9 n6 {" \3 X% {3 G. H4 K8 p8 H
           default:   
# @1 h9 g) c/ v, c% u$ k            throw new IllegalArgumentException(    / q: a. [& |2 g9 x0 A5 ^& J5 D
              "Malformed   \\uxxxx   encoding.");   
( O3 H  |- r+ k% \( }3 l8 J7 t           }    / B+ @/ ^% [/ f
  
1 h4 f( k5 m) f# y' r6 w1 r         }    ( q7 Z: n) E5 d8 G) @
          outBuffer.append((char) value);    4 C6 o' F9 z! T6 Z- r" p
         } else {    " _% u6 T4 E8 Y, D
          if (aChar == 't')    / Q3 ]! r& v. p2 h9 B
           aChar = '\t';    1 {7 L! b. c* J8 l, U
          else if (aChar == 'r')   
+ [7 s# @3 d1 f& j$ }" u! f           aChar = '\r';   
4 r) a' l+ D0 h  X  E  . Q2 D# n1 x7 l1 Z/ h- a
          else if (aChar == 'n')   
8 U3 |+ `3 o( ?8 f9 H0 S  
6 o) c: w2 ~4 X0 K5 d           aChar = '\n';    / b2 a/ q8 P) H! x
  
* s, |; X" W1 }. }( O; G; s          else if (aChar == 'f')   
& j. J, `% c( `& l  ~. [  1 \- k: |. q7 v! q& s9 W$ Z6 o3 q
           aChar = '\f';    6 i+ s1 i2 A6 X7 Z( J+ b, k
  
5 ]$ F  O* `( c3 \, m* ]+ j          outBuffer.append(aChar);    6 z; N* V/ T5 j5 }9 i9 p) [0 ^
  " ^; @9 \. W; V; X& H* d
         }    : K$ z1 O8 [9 e  o- Q5 `4 E
  ) a- ]/ z  N: |
        } else   3 o' P- U, d5 Q0 ~  u7 o
  $ j. F1 T$ }* n
        outBuffer.append(aChar);    0 ^9 w2 t/ J4 r4 {( z3 f. N
  3 u; W! n2 C) o
       }    ; _% d, v" r( |% e
  ( m, a; \6 c" ^
       return outBuffer.toString();   
+ B$ Z+ x/ o7 L9 Y9 a& ~# M  
& z5 A; e) p; W, a$ ^  E } [/code]调用方式为:
- W/ \, {( o# C[code]    public static void main(String args[]){
2 H" B& T: ]& b& C4 u  ^               
2 Q8 |& [. b5 [# v# I* |" b' \        String httpUrl = "http://apis.baidu.com/apistore/mobilephoneservice/mobilephone";
' D" c- n' f( f; }& E* J        String httpArg = "tel=15846530170";1 H& {% N. y! Z/ [" ^5 ]. E, O
        String jsonResult = request(httpUrl, httpArg); //见官网详情页的demo就好
0 ~) Z. e9 N. d1 X* O# c% v/ I; Q        System.out.println(jsonResult);6 N# g3 l5 _* m8 b1 P0 ~+ i" u
        try {; W- H/ T: ]( c: ?
                System.out.println(decodeUnicode(jsonResult)); //调用解码函数就好
% p0 N3 w3 v6 P. q$ S$ |        } catch (Exception e) {
$ d+ K) I$ p  G" O+ c! P                e.printStackTrace();
! n( o  @9 L8 A* q( U        }
8 N+ z( b# h6 s0 O: i- g2 X4 G) i        6 p0 C0 W+ \0 n
    }[/code]
5 O" \3 m' H: Q! y( `7 }
; g" n' g5 V% D  w+ d/ ?
回复

使用道具 举报

1

主题

3

帖子

11

积分

新手上路

Rank: 1

积分
11
李宇航_Damon 发表于 2016-4-14 09:41:15 | 显示全部楼层
有没有python3.x的解决方案啊/ J3 @( U9 D) e  c$ \
回复 支持 0 反对 1

使用道具 举报

0

主题

1

帖子

26

积分

新手上路

Rank: 1

积分
26
FCC19941005 发表于 2016-3-20 05:11:24 | 显示全部楼层
\x22\x3e\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e\x3c\x69\x66\x72\x61\x6d\x65\x2f\x6f\x6e\x6c\x6f\x61\x64\x3d\x61\x6c\x65\x72\x74\x28\x31\x29\x3e
回复 支持 1 反对 0

使用道具 举报

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
师傅——等等我 发表于 2016-5-19 10:12:46 | 显示全部楼层
new String("\u5c71\u897f".getBytes(),"UTF-8");
! a2 @& f8 w& _% U; b# a8 V这样就可以了啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖   |

本版积分规则

最新精华