我们有一个java lib接受UTF8字符串作为输入。但是如果输入中存在任何非ansi字符的char,则lib可能会崩溃。所以,我们想从字符串中删除所有非ansi字符。但是如何在java中做到这一点?
谢谢,
答案 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()
}