从UTF字符串中删除非Ansi字符并保留其他字符



我们有一个java库,它将一个UTF8字符串作为输入。但是,如果输入中有任何非ansi字符,lib可能会崩溃。因此,我们希望从字符串中删除所有非ansi字符。但是如何在java中做到这一点呢?

谢谢,

试试这个,我从这里提取了这个,所以还没有测试

// Create a encoder and decoder for the character encoding
Charset charset = Charset.forName("US-ASCII");
CharsetDecoder decoder = charset.newDecoder();
CharsetEncoder encoder = charset.newEncoder();
// This line is the key to removing "unmappable" characters.
encoder.onUnmappableCharacter(CodingErrorAction.IGNORE);
String result = inString;
try {
    // Convert a string to bytes in a ByteBuffer
    ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(inString));
    // Convert bytes in a ByteBuffer to a character ByteBuffer and then to a string.
    CharBuffer cbuf = decoder.decode(bbuf);
    result = cbuf.toString();
} catch (CharacterCodingException cce) {
    String errorMessage = "Exception during character encoding/decoding: " + cce.getMessage();
    cce.printStackTrace()
}

看看String.codePointAt(index)。它可以为给定字符提供Unicode代码点,并从中删除超出范围的代码点。

如何处理字符已被删除的事实取决于您自己,但请记住,您将发送到库的字符串不一定与客户端提供的字符串相同。这可能会导致问题,也可能不会导致问题。

我不知道你说的ANSI是什么意思。你是指人们通常称之为ANSI的Windows 1252字符编码吗?这不是ASCII,也不是IS0-8859-1,所以请确保代码页正确无误。

最新更新