查看: 21553|回复: 4

Java中Unicode编码汉字转化

[复制链接]

10

主题

52

帖子

459

积分

版主

Rank: 7Rank: 7Rank: 7

积分
459
sfy123home 发表于 2016-1-29 15:29:50 | 显示全部楼层 |阅读模式
很多人反应通过接口返回的结果中汉字为类似于[color=#333333][font=Helvetica,]"province":"\u8fbd\u5b81","city":"\u6c88\u9633"[/font][/color]
' M; T. b) F; [) W/ j6 x[color=#333333][font=Helvetica,]这样的不是中文,自己写了个函数进行转化[/font][/color]
* J+ D6 P# N" M  ~% D) {[color=#333333][font=Helvetica,]核心函数如下:[/font][/color]! `5 ?# O  b: s, W) T2 ~
[code] public static String decodeUnicode(String theString) {    & P  l( n/ `4 K8 Y) e# D' I5 L" V
  ( n7 v. N7 k3 q& [) Q# v! M
     char aChar;   
4 z! i/ J; J- w, a  0 N+ y, x0 n$ }1 h  z  J0 v
      int len = theString.length();    2 D9 w4 D1 f# G( z
  
0 n3 }% e  D, t. G     StringBuffer outBuffer = new StringBuffer(len);   
6 n( T9 R: |7 k! r$ j  7 u; H' U5 [9 Y( y' ?
     for (int x = 0; x < len;) {   
) {7 C4 a1 `: a- z" W: e  
. T$ q: L4 u) H/ D7 E! }2 `8 _( p4 s      aChar = theString.charAt(x++);   
3 @4 S# y4 V! Q8 l1 H  $ Q; n  m9 w( Z1 U
      if (aChar == '\\') {   
, I8 p' {7 }. s6 {  : M5 d( `# @$ E& p
       aChar = theString.charAt(x++);    9 j) u9 P- `7 c: i
  * o9 [& y2 L" c* S
       if (aChar == 'u') {   
3 z: s$ |- W, W* Z0 |0 `0 t& [  
# D# w1 }8 O2 M        // Read the xxxx    $ Z. V: \1 s6 r" @& d
  
/ r5 ^3 w0 q8 Y0 a1 V5 f" e        int value = 0;   
+ k- k2 r5 W4 t6 [  9 [  h  v0 V6 p* G0 M
        for (int i = 0; i < 4; i++) {    0 _& F/ B" d' I* n3 N( m' p
  
" {/ n/ j1 X! H         aChar = theString.charAt(x++);    " i) h* a' s6 f% u7 d" u
  
# `2 O: G0 s4 s# i' z* A         switch (aChar) {    4 J% m8 j" A4 A2 ~. U
  9 M3 C6 U1 ?  g1 {
         case '0':   
' D  ^2 G- C9 y  J. s  $ c, O/ |4 V7 o
         case '1':   
/ g8 ]1 B% r$ j  m1 H7 e% e3 C  % D- b; g( Z, s( i
         case '2':   
' B- P! `- i8 S* g8 ]2 J  ; h; n7 }% _9 B+ J) E! |. v
         case '3':   
# h) ~) a7 S7 P, c# e  
6 x3 n, G$ `* k        case '4':   
& {0 Q3 ^5 g; b( z' `# z1 v  
( Y& K  J& G2 O# A         case '5':   
+ V0 e! l) d% _6 s, e$ @  
- G  o3 c  g% l  j6 B          case '6':      i' F6 {2 o( H1 P4 o8 X
           case '7':    & F! U8 C  E" Q
           case '8':   
8 ~  F( X2 ?- T  i  J           case '9':   
. V) E: k: N  S, x            value = (value << 4) + aChar - '0';   
" x! V: \3 f- |- J' j8 W            break;   
/ q# E- z3 q1 d! x( @           case 'a':   
8 g/ k3 Y1 m5 E, R7 K           case 'b':   
3 m4 q, _' p( J7 K8 Y           case 'c':   
+ U6 }6 z) j; |& P7 `1 s           case 'd':   
' @% ?1 H, _  F8 l9 k5 ~/ N           case 'e':    ) D$ ]8 E$ ^1 h$ Y5 m$ I& ^4 ~/ M
           case 'f':    2 {7 _7 R5 `4 c; ]& Y; b
            value = (value << 4) + 10 + aChar - 'a';   
$ t5 V6 X* G8 N# _           break;      y  k* C9 t0 N3 p" ?
           case 'A':   
9 c! @" d# p2 x" W           case 'B':    # o6 n# U, x* w; r
           case 'C':    8 b) z7 P8 b! H+ Z
           case 'D':    , y8 ?3 V: G0 D& w2 f
           case 'E':   
1 ^$ a& R3 B0 u7 X           case 'F':   
& S7 a. Q/ K7 O& s            value = (value << 4) + 10 + aChar - 'A';   
  f  h5 N2 x2 z6 E1 J! c- D/ E# d            break;   
% e7 O) u2 v% O! y' F0 Q           default:   
: v7 |. f6 G) ^. x, D" H            throw new IllegalArgumentException(    / {- x2 {& J/ |, `5 ^9 ]
              "Malformed   \\uxxxx   encoding.");    ) M$ E9 v! W* s7 W. a8 Z1 _/ V& g* Y
           }    % m( n  X2 }% S2 s" F
  - e' A; j. O4 ]9 Y$ L9 v, V6 z- I
         }    6 W, e, k1 f; b. G/ F4 X
          outBuffer.append((char) value);   
7 y8 m- U" J4 E8 s         } else {   
+ q' F8 r4 B- \          if (aChar == 't')    0 Z4 {% h& r% d8 Y" Y
           aChar = '\t';   
8 M) e6 H" c3 I          else if (aChar == 'r')    " N5 [% `  |6 m: c! I
           aChar = '\r';   
7 h) X# H) k- K5 k6 }  + ]" }- |/ S$ [3 Y8 h
          else if (aChar == 'n')    9 V" R/ n6 [- O8 B, G) o& Y
  
, {- E1 X5 j/ \           aChar = '\n';   
. l; Q' s7 _2 S$ f8 |1 u  / k8 k2 {# s& m& S; H/ G& A9 W- U
          else if (aChar == 'f')    * K  M6 }. v4 h6 C* ?* c6 k
  . m# l/ w/ _; A$ j8 |' Q$ ]
           aChar = '\f';   
3 m% C0 m$ x# r( u3 i! Z6 N  : m/ J0 U2 U' g' @
          outBuffer.append(aChar);    " `. `# D8 u7 B5 }+ a0 Q+ C; U, q
  
+ E5 E" L8 f( j7 N         }   
- l, z/ }8 x1 o) V% N$ s+ O$ m  / `: Z& V& F& i0 v
        } else   
; i1 G: D6 V2 k2 p1 v2 p  
  {' i$ q. z+ C# L        outBuffer.append(aChar);   
+ g3 b) D$ c+ d' j9 }3 q/ Q: [  3 z5 R" i+ o. n
       }    7 s+ H" k- \8 m9 h) v1 R9 S; v
  # [4 O  U8 f. Y( @1 A
       return outBuffer.toString();    4 ~0 X  r8 e' q2 ]) R' @  g
  
7 y) k, ]1 I! W  J3 H' z, s0 U } [/code]调用方式为:- j: e8 k# C! g( p. |
[code]    public static void main(String args[]){
! ?6 V; h9 ?. v' K; a- s               
) Z2 d0 G+ U' W+ M0 Z  H9 B        String httpUrl = "http://apis.baidu.com/apistore/mobilephoneservice/mobilephone";
8 F5 M9 z) N+ d& l- i" @        String httpArg = "tel=15846530170";
7 J( \8 A9 z0 l$ K' h        String jsonResult = request(httpUrl, httpArg); //见官网详情页的demo就好! C: \0 g( p* b; m# I$ l* Q+ s
        System.out.println(jsonResult);
7 ~! j$ L% `* [  W* p        try {* E* v, W6 p4 a( p1 ?
                System.out.println(decodeUnicode(jsonResult)); //调用解码函数就好$ @" H5 n, Y( |6 T1 A9 d
        } catch (Exception e) {- W# ?& y  [% x
                e.printStackTrace();+ P4 A/ y% X$ g) U3 e, S) Y  j
        }
2 L6 Y' f$ `8 z/ \( u9 V8 U/ C8 Z/ o1 r3 ^       
. G' s! @: q+ h, U/ `$ A    }[/code]
- X1 \. O( b4 k. P# W" H9 q8 s
, r7 J+ V# _( m# B( C3 B7 Y9 d
回复

使用道具 举报

1

主题

3

帖子

11

积分

新手上路

Rank: 1

积分
11
李宇航_Damon 发表于 2016-4-14 09:41:15 | 显示全部楼层
有没有python3.x的解决方案啊
( E6 ~' ?0 _$ d* J
回复 支持 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");
- N. g* e" P2 y  d! t- J' t8 \" M4 u+ \这样就可以了啊
回复 支持 反对

使用道具 举报

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

本版积分规则

最新精华