`
liguocai2009
  • 浏览: 32022 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

new String(str.getBytes("ISO8859-1"),"GBK")的实质

 
阅读更多
import java.io.UnsupportedEncodingException;


public class main {
	public static void main(String[] args) throws UnsupportedEncodingException{
		byte [] b= new byte[]{(byte) 0xcc,(byte) 0xe1,(byte) 0xbd,(byte) 0xbb};
		String s = new String(b,"ISO8859-1");
		System.out.println(s);
		print(s.getBytes("ISO8859-1"));
		print(s.getBytes("GBK"));
		print(s.getBytes("UTF-16"));
		System.out.println(new String(s.getBytes("ISO8859-1"),"gbk"));
		
		String ss = "中文";
		print(ss.getBytes("UTF-16"));
		print(ss.getBytes("ISO8859-1"));
	}
	
	static void print(byte [] b){
		for(byte _b : b){
			String s = Integer.toHexString(_b&0xff);
			if(s.length()==1){
				s = "0"+s;
			}
			System.out.print(s + " ");
		}
		System.out.println();
	}
}


浏览器发送GBK字节到中间件,中间把这些字节都当作ISO8859-1字符处理,直接new String()打印出来的肯定是乱码,因为(byte) 0xcc,(byte) 0xe1,(byte) 0xbd,(byte) 0xbb对应的ISO8859-1字符是找不到的!

我们需要从字符串中重新把GBK字节拿出来,构造出原来的中文字符串。原来如代码所示。
分享到:
评论

相关推荐

    DELPHI 10.3编码转换 iso-8859-1转GBK,GBK转iso-8859-1

    本文将深入探讨标题提及的“DELPHI 10.3编码转换:iso-8859-1转GBK,GBK转iso-8859-1”,以及在二维码生成中的应用,以解决乱码问题。 首先,我们需要理解两种编码系统的基础知识。`ISO-8859-1`是一种单字节编码...

    关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    byte[] isoBytes = new String(bytes, "ISO-8859-1").getBytes("ISO-8859-1"); ``` - **从`byte[]`到`String`**: - `public String(byte[] bytes, String charsetName) throws UnsupportedEncodingException` ...

    史上最全的java基础总结大全

    String str3 = new String(buf3,"ISO8859-1");//错误解码 //编码解码4:错误编码正确解码 String str4 = "你好"; byte[] buf4 = str4.getBytes("ISO8859-1");//错误编码 String str4 = new String(buf4,"GBK")...

    ISO-8859.docx

    tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); tempStr = tempStr.trim(); } catch (Exception e) { System.err.println(e.getMessage()); } return tempStr; } ``` 接下来,我们谈谈抽象类...

    struts2上传插件(中文编码冲突解决)

    解决Struts2上传时候使用UTF-8的冲突问题... * 对于请求流,使用的ISO-8859-1编码方式进行,如果发现请求内容中出现名称乱码,请使用new String(str.getBytes("ISO-8859-1"),"GBK")进行编码转换。 包里面已经含有源代码

    我总结的中文处理问题.txt

    `str.getBytes("ISO-8859-1")`首先将字符串按照ISO-8859-1编码转换成字节数组,然后再通过`new String(byte[], "GBK")`构造函数将其转换为GBK编码的字符串。这种方法适用于对已知编码的字符串进行转换。 #### 方法...

    Java Web程序设计-1期 《Java Web程序设计》_经验技巧.doc

    例如,`new String(str.getBytes("gbk"), "iso-8859-1")` 和 `new String(str.getBytes("iso-8859-1"), "gbk")` 分别用于转换。 2. 引用Java类: - 为了减少重复工作,可以创建一个`lib.jsp`页面,包含所有常用的...

    android GBK转换为String

    String unicodeStr = new String(gbkBytes, "GBK"); ``` 2. **Unicode转GBK(字符串)**: - 反之,如果已有Unicode字符串,需要编码成GBK,可以使用`CharsetEncoder`: ```java String unicodeStr = ...; // ...

    java如何正确使用字体编码

    String str = new String(rs.getBytes(1), "GBK"); ``` 如果页面使用的编码与数据库不一致,则可能需要进行编码转换处理。 ##### 使用GBK作为数据库字符编码 如果数据库使用GBK编码,则可以按照以下方式配置...

    java乱码问题

    tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); tempStr = tempStr.trim(); } catch (Exception e) { System.err.println(e.getMessage()); } return tempStr; } ``` 这段代码中,首先通过`...

    RandomAccessFile 解决乱码

    String st = new String(ra.readLine().getBytes("ISO-8859-1"), "GBK"); ``` 读取文件时,首先通过 `readLine()` 方法读取一行内容,然后将其以 `ISO-8859-1` 编码的形式转换为字节数组,再使用 `GBK` 编码解码...

    java中编码的转换

    - `str = new String(rs.getBytes(1), "GBK")` 值得注意的是,即使页面使用UTF-8,数据库中存储的也是UTF-8,依然可以使用GBK编码进行解码来正确显示中文。 #### 2. 使用GBK进行数据库连接 同样地,可以通过设置`...

    企业面试笔试题总汇v1.6重新编辑版

    System.out.println(new String(str.getBytes("ISO-8859-1"), "ISO-8859-1")); // 输出乱码 System.out.println(new String(str.getBytes("UTF-8"), "UTF-8")); // 输出中国 System.out.println(new String(str....

    java中文乱码解决问题

    return new String(str.getBytes("ISO-8859-1"),"GBK"); } 3. 在数据库中存储和读取中文数据 对于大多数数据库的 JDBC 驱动程序,在 Java 程序和数据库之间传递数据都是以 ISO-8859-1 为默认编码格式,所以,我们...

    Java设置String字符串编码方法详解

    OutputStreamWriter writer = new OutputStreamWriter(fos, "ISO-8859-1"); // 以ISO-8859-1写入文件 ``` 4. URL编码和解码 在网络编程中,URL中可能包含非ASCII字符,这时需要使用`URLEncoder.encode()`和`...

    java,jsp,servlet 乱码

    - 字符串解码与编码转换:如果接收到的数据是其他编码,如ISO8859-1,需要先解码再编码,例如`new String(str.getBytes("iso8859-1"), "gb2312")`。 5. **JSP页面处理**: - 可以在JSP页面中直接对参数进行编码...

    java字符串的各种编码转换

    public String toISO_8859_1(String str) throws UnsupportedEncodingException { return changeCharset(str, "ISO-8859-1"); } ``` #### 3. UTF-8 (8位统一码转换格式) - **定义**:UTF-8是一种可变长度的...

    java字符串编码转换

    str = new String(str.getBytes("ISO-8859-1"), "GB2312"); ``` 这里 `getString` 方法默认返回的是按照ISO-8859-1编码的字符串。通过 `getBytes("ISO-8859-1")` 和 `new String(..., "GB2312")` 的组合,可以将该...

Global site tag (gtag.js) - Google Analytics