gpt4 book ai didi

java - 如何在 Java 中读取字符串流并丢弃非法字符?

转载 作者:行者123 更新时间:2023-11-29 07:57:25 26 4
gpt4 key购买 nike

我必须解析来自 TCP 连接的字节流,它应该只给我可打印的字符,但实际上情况并非总是如此。我在某些字段的开头和结尾看到了一些二进制零。我无法控制数据源,我需要处理“脏”行。如果我可以过滤掉无效字符,那就没问题了。相关代码如下:

srvr = new ServerSocket(myport);
skt = srvr.accept();
// Tried with no encoding argument too
in = new Scanner(skt.getInputStream(), "ISO-8859-1");
in.useDelimiter("[\r\n]");
for (;;) {
String myline = in.next();
if (!myline.equals(""))
ProcessRecord(myline);
}

我在每一行有“污点”的地方得到一个异常。过滤掉无效字符同时仍然能够获取字符串的其余部分的好方法是什么?

最佳答案

您必须将您的 InputStream 包装在 CharsetDecoder 中,定义一个空的错误处理程序:

//let's create a decoder for ISO-8859-1 which will just ignore invalid data
CharsetDecoder decoder=Charset.forName("ISO-8859-1").newDecoder();
decoder.onMalformedInput(CodingErrorAction.IGNORE);
decoder.onUnmappableCharacter(CodingErrorAction.IGNORE);
//let's wrap the inputstream into the decoder
InputStream is=skt.getInputStream();
in = new Scanner(decoder.decode(is));

您还可以使用自定义 CodingErrorAction 并在出现编码错误时定义您自己的操作。

关于java - 如何在 Java 中读取字符串流并丢弃非法字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16738512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com