java 过滤非utf8_java源码-过滤掉超过3个字节的UTF8字符

import java.io.UnsupportedEncodingException;9 S  S5 c2 W8 `" H* O  w1 S% _1 M! Y

import java.nio.ByteBuffer;5 p5 Y1 V+ l) u% f

, O8 H0 u- J. C

: i6 m3 Y! Y/ _1 k. apublic class Test {& i0 b- x1 n1 d* o

9 t3 r$ r' S: ^9 C2 L

$ c% D- D8 [8 U! K: B7 T2 o! Ypublic static void main(String[] args) throws UnsupportedEncodingException {0 k! S$ ]) L$ y2 b2 R4 j

String nickName = "得😩得得😩";* N. |0 S: N* \* ?" o

System.out.println(filterOffUtf8Mb4(nickName));

& S+ A3 d+ F. K}( w2 e  `2 w: ]' A6 H  [

% K! i. Z0 B& ^( f

: ~+ F  I$ Z2 ~9 p( V" y6 f. X8 h! wpublic static String filterOffUtf8Mb4(String text)

W& L/ d& R$ e+ g  G7 Jthrows UnsupportedEncodingException {( v1 S( z2 W# r/ J

" h2 G2 u3 V7 F0 u2 I' d7 q4 s. S% S6 b3 a% ]

byte[] bytes = text.getBytes("utf-8");

+ O$ c5 g9 Q# a1 i" Q, _! ^; f4 h" v8 \1 ^* g+ ~4 A% w

5 Y8 P! x2 F) z2 }" L) YByteBuffer buffer = ByteBuffer.allocate(bytes.length);

/ Z7 |5 C/ l" T+ q" \% a* R, ]+ }5 Z$ m+ \; O7 D: `# a! {; E. L/ C: Z5 ~% O: Q* ^) w# Q3 _

int i = 0;

9 v3 U2 P( n; G' \/ ?* ~) c* v% p1 ?6 o* }* D6 i, A& @) ~9 u% K) c( p+ J# I

while (i < bytes.length) {

+ C3 Z7 @7 _- ~* o: k2 c' E1 O+ g- s" }3 A5 L* C) o* }

3 j$ x: F4 c- _' z+ L! D# R$ z2 }short b = bytes;+ I6 i( T% T2 N8 f( Y

% O; |! M5 q3 G0 A* i0 [% n

* j* R. A, q5 eif (b > 0) {

& g' m/ i) D$ j6 O; h7 z( A2 L) o/ L. w2 S- {# U, `. x% u3 G, w" J3 ], Y

buffer.put(bytes[i++]);+ e' ]  U! J7 k' v+ e: T8 G. K

9 z5 X, \' ?8 p' n) ~, J7 p

0 ?" C. j1 D" P( \- L+ O& ncontinue;* d5 F) S( J( S$ X% b

6 t; O3 A: `" R& j. A, p# l

( W! A' j9 L% `0 X& x. B  Q}

3 x, R4 L) q; S% b: u. R2 j& [' R6 i: h) D3 [& Q7 F7 j# L0 Q8 @3 V

b += 256;

e8 N3 Y$ \/ Q$ ^0 N2 w% h( E! ^# b2 p# V, s- ^) |2 {; l" }. Q0 v* A9 {

if ((b ^ 0xC0) >> 4 == 0) {9 G" U# c- s/ A. W* [

$ L' u1 g! O$ i% x9 R$ e( o9 I

buffer.put(bytes, i, 2);1 b5 x1 f, F5 `

/ I6 c# i4 f. R! W( C: L- [8 m

7 `9 `9 m# D6 E1 Z0 X; z& Li += 2;

& d, M3 X" R2 K. g9 p( v. `7 k: P( v( L0 k  P6 H9 i6 m

U) A- s4 X: W: l}7 N6 }) |* E( C6 D. W# F

6 l2 ?- F: z7 B/ Z

# Z' }( {) @1 v- @5 r/ L' E) S$ eelse if ((b ^ 0xE0) >> 4 == 0) {) `. S2 o" _$ `8 u- g- C

: c( x% b0 J7 H/ S9 |- ]2 J# ]/ Q1 B5 B

- Q) f( p, y+ bbuffer.put(bytes, i, 3);8 x* Q% i) o7 D  A$ e4 k

5 j. L9 |8 P3 e6 ^" _! z3 k5 {2 n

5 r# B# ?' S' M3 r- d3 ki += 3;

* J( y) p; d) {/ |- k8 F  k0 A% |6 _) O( r

" y3 G5 K) b4 ^8 N}' V# g2 O! }* ?

0 m$ Q  r! H$ B! U9 D) ?

7 ?2 O0 N" z" q, _, Oelse if ((b ^ 0xF0) >> 4 == 0) {

" O# `$ `9 Z, i% b7 o8 d1 v: i/ M( [

- D. D0 D5 u9 J( V4 Ni += 4;

2 R& b& |, ]8 h0 Y. W6 q; p- t' e) i. u6 @' F) p9 x3 y9 ~% |8 {8 v& `

}

! {% \& Q5 r8 Y9 ~- r8 P; }3 [// 添加处理如b的指为-48等情况出现的死循环

' P0 n% K$ ?7 ^0 S) |else {! z; K( Z  G+ c7 u# }

buffer.put(bytes[i++]);6 ?( r+ o$ L3 M0 _3 H  M5 n5 V

' a) J) i6 I) y( L: d+ g3 [" w( _! c. c* r

continue;

' e' M. a/ A3 S0 T}

* M- x+ Q0 @) ~* S$ u4 o9 k/ z0 \( h- ^

' t1 E6 J. L3 R9 D0 r* Y! D}

9 {% S' I0 I8 W2 l  M7 s9 v( ?- E: ]! a4 u$ T$ }7 k2 R. C" g) b. y7 k4 F( |8 @2 s- Z. I$ j

buffer.flip();

3 G% v$ c4 B( C, l9 {1 O! y, f+ \, c6 V

# i( K0 h: \3 y2 Y( Ireturn new String(buffer.array(), "utf-8");9 H5 k2 N& ?! `: E

}6 p( I7 E8 d7 z$ s  s& ^

8 w, w2 U5 f) X% k5 d

4 I0 H9 s* b& r. |- I+ l" t}

9 ~# `+ b: S3 g( H

# t) m* e$ ]& a# R" U

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值