下面的代码检测给定的字符串中是否包含非ASCII字符。我们使用包中的CharsetDecoder类java.nio将字符串解码为有效的US-ASCII字符集。
package org.nhooo.example.io; import java.nio.charset.CharsetDecoder; import java.nio.charset.Charset; import java.nio.charset.CharacterCodingException; import java.nio.CharBuffer; import java.nio.ByteBuffer; import java.util.Arrays; public class NonAsciiValidation { public static void main(String[] args) { // 此字符串包含一个非ASCII字符,将产生异常 //在这个程序中。第二个字符串只有一个有效的ASCII字符。 byte[] invalidBytes = "Copyright © 2017 Kode Java Org".getBytes(); byte[] validBytes = "Copyright (c) 2017 Kode Java Org".getBytes(); // 返回命名字符集的字符集对象。 CharsetDecoder decoder = Charset.forName("US-ASCII").newDecoder(); try { CharBuffer buffer = decoder.decode(ByteBuffer.wrap(validBytes)); System.out.println(Arrays.toString(buffer.array())); buffer = decoder.decode(ByteBuffer.wrap(invalidBytes)); System.out.println(Arrays.toString(buffer.array())); } catch (CharacterCodingException e) { System.err.println("The information contains a non ASCII character(s)."); e.printStackTrace(); } } }
以下是程序的结果:
The information contains a non ASCII character(s). [C, o, p, y, r, i, g, h, t, , (, c, ), , 2, 0, 1, 7, , K, o, d, e, , J, a, v, a, , O, r, g] java.nio.charset.MalformedInputException: Input length = 1 at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:281) at java.base/java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:815) at org.nhooo.example.io.NonAsciiValidation.main(NonAsciiValidation.java:23)