「java字符串乱码」java string 乱码

博主:adminadmin 2023-01-09 06:39:08 1072

今天给各位分享java字符串乱码的知识,其中也会对java string 乱码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java爬虫一段话里的部分字符乱码解决

1. 网络爬虫乱码的原因。

源网页的编码与抓取后的编码转换不一致。如果源网页是gbk编码的字节流,程序在我们抓取后直接用utf-8编码输出到存储文件,这必然会造成乱码,即当源网页编码与程序抓取后直接处理编码一致时,就不会出现乱码,然后统一字符编码后也就不会出现乱码。注意区分源网络代码A,程序B直接使用的代码,统一转换字符的代码C。

2. 是网页的服务器端代码。

B.捕获的数据原本是字节数组,由A编码,只有B=A才能保证不会出现乱码;否则,当字符集不兼容时,就会出现乱码字符。这一步常用于测试。

c、统一转码是指在获得网页的原始编码A后进行统一编码,主要是将每个网页的数据统一成一种编码,往往首选字符集较大的utf-8。

每个网页都有自己的代码,比如gbk,utf-8,iso8859-1,日本jp系统代码,西欧,俄语等等。爬行时,所有类型的代码都将被扩展。有的爬虫只是简单的识别网页,然后统一编码,有的则直接按照utf-8统一处理,不需要判断源网页,显然会造成乱码。

3. 乱码的解决方案。

根据原因找到解决办法很简单。

1) 确定源网页的代码a。

代码a通常位于网页的三个位置,即httpheader的内容、网页的元字符集和网页标题中的文档定义。获取源网页代码时,依次判断这三部分数据,从头到尾优先级相同。

理论上这是对的,但是国内有些网站不符合标准。比如写出来的gbk其实是utf-8,有的写出来是utf-8,其实是gbk。当然这是几个网站,但是确实存在。因此,在确定网页编码时,应该对这种特殊情况给予特殊处理,如中文检查、默认编码等策略。

在另一种情况下,如果以上三种都没有编码信息,一般使用第三方的网页编码智能识别工具,如cpdetector。原理是通过统计字节数组的特性来计算实际编码,有一定的准确率,但是我发现在实践中准确率还是很有限的。

但是综合以上三种编码确认方法后,中文乱码的问题几乎可以完全解决。在我的基于nutch1.6的网络爬虫系统中,经过统计,编码准确率可以达到99.99%,这也证明了上述方法和策略的可行性。

2) 程序通过代码b还原源网页数据。

显然,这里的B应该等于a,在java中,如果源网页的字节数组是source_byte_array,就会转换成stringstr=newstring(source_byte_array,B)。即这些字节数组对应的字符被正确编码显示在内存中,此时打印结果正常。此步骤通常用于调试或控制台输出测试。

3) 统一转码。

网络爬虫系统中有很多数据源。如果无法使用数据,它将被转换为其原始数据,如果这样做是浪费的。所以一般爬虫系统要对抓取的结果进行统一编码,做到一致,使用方便。此时,在(2)的基础上,可以进行统一的编码转换,在java中的实现如下。

源网页的字节数组是source_byte_array。

转换为普通字符串:stringnormal_source_str=newstring(source_byte_array,c)。这时候可以直接用javaapi存储,但是字符串往往不直接写。因为一般爬虫存储是将多个源网页存储在一个文件中,所以要记录字节偏移量,所以下一步。 再将得到的str转换为统一的编码C格式的字节数组,则byte[] new_byte_array=normal_source_str.getBytes(C)即可,此时即可用java io api将数组写入文件,并记录相应的字节数组偏移量等,待真正使用时,直接io读取即可。

爬虫过程不仅会存在乱码问题,还会存在网站爬取涉及法律、IP受限,爬取行为受限等等问题,这个时候就需要不断去解决这些问题。

java中的输出string字符串,是乱码

同学,这个不是乱码。

数组本身是没有toString()方法的。

你这里有个默认的调用 Object.toString()

Object中的toString()方法,是将传入的参数的类型名和摘要(字符串的hashcode的十六进制编码)返回。

也就是说,你直接对数组使用了toString()方法,就会得到 一个Ljava.lang.String;@175d6ab

其中,Ljava.lang.String 是指数据是String类型的,175d6ab是摘要了

你要想得到你要的类型,需要使用循环的方法来输出数组中的每一个值。

下面是jdk中关于toString()方法的注释:

/**

* Returns a string representation of the object. In general, the

* {@code toString} method returns a string that

* "textually represents" this object. The result should

* be a concise but informative representation that is easy for a

* person to read.

* It is recommended that all subclasses override this method.

* p

* The {@code toString} method for class {@code Object}

* returns a string consisting of the name of the class of which the

* object is an instance, the at-sign character `{@code @}', and

* the unsigned hexadecimal representation of the hash code of the

* object. In other words, this method returns a string equal to the

* value of:

* blockquote

* pre

* getClass().getName() + '@' + Integer.toHexString(hashCode())

* /pre/blockquote

*

* @return a string representation of the object.

*/

Object中的toString()方法实现:

public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

Java判断字符串是否是乱码

java.nio.charset.Charset.forName("GBK").newEncoder().canEncode("测试") //判断是不是GBK编码 即是否乱码

//使用request.getQueryString()获取通过URL传过来的值 有可能是乱码 如:q=鿥

String s = request.getQueryString();

if(s!=null){

if(!(java.nio.charset.Charset.forName("GBK").newEncoder().canEncode(s))){

try {

s = new String(request.getQueryString().getBytes("ISO-8859-1"),"UTF-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

}

java 字符串字符串乱码问题

应该是编码格式的问题吧

//ISO编码转为GBK编码

public static String ISOtoGBK(String s) {

String str = "";

try {

if (s == null || s == "" || s.equals("")) {

str = s;

} else {

str = new String(s.getBytes("ISO8859-1"),"GBK");

}

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return str;

}

java 编程中汉字字符串变成繁体或乱码

这个是典型的GBK乱码。

应该是你的jdk的编码设置不对。和你的java文件编码不一致。

[Java]如何解决乱码问题

乱码的话,分为几个位置的乱码。

一、是JSP页面乱码问题,

解决方式:%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%

二、后台向前端传输字符串的的乱码

解决方式: response.setContentType("text/html;charset=UTF-8");

response.setCharacterEncoding("UTF-8");

三、Ajax异步传参时的乱码问题

解决方法:contentType:"application/x-www-form-urlencoded; charset=utf-8",

四、myEclips或Eclips打开文件时乱码

解决方法:右键该文件-porperties-把该文件调为UTF-8的格式

纯手写,请给采纳

java字符串乱码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java string 乱码、java字符串乱码的信息别忘了在本站进行查找喔。