当前位置: 首页 > 知识库问答 >
问题:

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

钱均
2023-03-14

我正在开发一个从文本文件读取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响应代码=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';

共有1个答案

孙俊彦
2023-03-14

根据操作系统的不同,新行可以是 \n\r\n 或有时是 \r,但这些是 ASCII 字符,如果编码是 ASCII 的超集,则它们始终相同。在这种情况下,只需删除页面中的所有 \r\n

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

 类似资料:
  • 问题内容: 我正在将一些代码从Processing移植到Java,我遇到的一个问题是处理的预编译器会将所有double转换为float。但是,在Eclipse中,我不得不将值显式转换为float。不过,我遇到了我不理解的错误。例如,不应该在该语句的末尾加上f来修复类型不匹配的问题(类型不匹配:无法从double转换为float)? 甚至在像这样的简单语句上,我也会遇到类型不匹配的情况。我究竟做错了

  • 问题内容: 如何以一种在Windows和Linux上都可以使用的方式替换Java字符串中的所有换行符(即,没有特定于操作系统的回车/换行/换行等问题)? 我试过了(注意readFileAsString是一个将文本文件读入String的函数): 但这似乎不起作用。 如何才能做到这一点? 问题答案: 你需要text将结果设置为: 这是必需的,因为字符串是不可变的-调用不会更改原始字符串,它会返回已更改

  • 问题内容: 我的Java应用程序使用base64编码,该编码在每76个字符后添加新行()。我需要将此编码的字符串放在属性文件中,换行符破坏了功能。 当我执行某项操作时,一切正常,但我只是想确保这是可以预期的,并且我不会介绍任何隐藏的问题。 问题答案: 对于许多无法处理长行的旧程序,必须将base64编码的字符串分成多行。用Java编写的程序通常可以处理很长的行,因为它们不需要自己进行内存管理。只要

  • 问题内容: 我可以遍历php脚本中的所有行并执行 和修剪可以删除\ n 但是我只是想知道是否可以在一个查询中完成相同的操作? 能行吗 然后,我可以执行此查询,而无需遍历! 谢谢 (PS:我可以测试它,但是表很大,不想弄乱数据,所以请考虑一下您之前是否已经测试过类似的东西) 问题答案: 您的语法错误:

  • 问题内容: 有谁知道如何在Python中获取文件的编码。我知道您可以使用编解码器模块打开具有特定编码的文件,但是您必须事先了解它。 有没有一种方法可以自动检测文件使用哪种编码? 提前致谢 编辑:谢谢大家非常有趣的答案。您可能还会对基于chardet的http://whatismyencoding.com/感兴趣(该站点的更多内容由bottle python框架提供支持) 问题答案: 不幸的是,没有

  • 问题内容: 我有以下数据,需要将它们全部放在一行中。 我有这个: 我需要这个: 这些命令均无法完美运行。 他们中的大多数让数据像这样: 问题答案: 编辑: 如果此处发布的所有命令均不起作用,则除了换行符以外,您还有其他用途。可能文件中有DOS / Windows行尾(尽管我希望Perl解决方案即使在这种情况下也可以工作)? 尝试: 如果这不起作用,那么您将不得不更仔细地检查文件(例如,在十六进制编