我可能不知道 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。
我正在开发一个从文本文件中读取 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。