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

时间:2013-06-24 12:23:10

标签: java utf-8 encode ansi

我们有一个java lib接受UTF8字符串作为输入。但是如果输入中存在任何非ansi字符的char,则lib可能会崩溃。所以,我们想从字符串中删除所有非ansi字符。但是如何在java中做到这一点?

谢谢,

2 个答案:

答案 0 :(得分:0)

看看String.codePointAt(索引)。这可以为您提供给定角色的Unicode代码点,从那里您可以删除范围之外的那些。

如何处理已删除字符的事实,但请记住,您要发送到库的字符串不一定与客户端提供的字符串相同。这可能会也可能不会引起问题。

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

答案 1 :(得分:0)

试试这个,我从here提取了这个,所以还没有测试过它

// 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()
}