我可能不知道 java 中的编码,如何从 Internet 页面中删除换行符?

How can I remove line feed character from a page from Internet which I may not know the encoding in java?

我正在开发一个从文本文件中读取 URL 的蜘蛛程序,然后下载写入 URL 的页面和另一个文件中的文件内容,它们之间有一个 \t。

当我获取页面时,它可能包含应该移动的换行字符。但是在获取页面之前不知道页面编码。

现在我正在使用JSOUP,因为它可以为我处理编码问题。但我发现 JSOUP 解析 HTML 以找到使其变慢的编码。

有没有一种简单的方法可以从字符串或字节数组中删除换行符?

此代码是否适用于 UTF-8 或 GBK?

                        byte[] buffer=new byte[4096];
                        String page="";

                        while((input.read(buffer))!=-1){
                            for(int i=0;i<buffer.length;i++)
                                if(buffer[i]=='\r'||buffer[i]=='\n'){
                                    buffer[i]=' ';
                                }
                            page+=new String(page);
                        }

我发现上面的代码在 utf-8 中不起作用,因为亚洲语言中的字符可能长于 8 位或 16 位,所以当我将字节转换为字符串时,字符可能会被拆分。

下面的代码对我来说很好用: int responseCode = connection.getResponseCode();

    if (responseCode >= 200 && responseCode < 300) {
                    InputStream input =connection.getInputStream();

                    byte[] buffer=new byte[BUFFER_SIZE];
                    byte[] urlBytes=(url+"\t").getBytes("ASCII");

                    System.arraycopy(urlBytes, 0, buffer, 0, urlBytes.length);
                    int t=0,index=urlBytes.length;
                    while((t=input.read())!=-1){
                        if(index>=buffer.length-1){ 
                            byte[] temp=new byte[buffer.length*3/2];
                            System.arraycopy(buffer, 0, temp, 0, buffer.length-1);
                            buffer=temp;
                        }
                        if(t=='\n'||t=='\r'){
                            t=' ';
                        }
                        buffer[index++]=(byte)t;
                    }
                    buffer[index++]='\n';

根据操作系统,新行可以是 \n\r\n,有时是 \r,但这些都是 ASCII 字符,如果编码是ASCII 的超集。在这种情况下,只需删除您网页中的所有 \r\n

然而,这不适用于其他编码,例如 UTF-16。