题目:怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?请用代码举例说明

代码:

// 创建GB2312编码格式的字符串
String str = new String("你好".getBytes("GB2312"), "GB2312");
// 把GB2312编码格式的字符串变成ISO-8859-1编码格式的字符串
String b = new String(str.getBytes("ISO-8859-1"), "ISO-8859-1");

解释:

首先我们需要明白,相同的中文字符串按照不同的编码方式生成的字节数组长度是不同的,我们可以来测试一下:

int a = "你好".getBytes("UTF-8").length;
int b = "你好".getBytes("GB2312").length;
int c = "你好".getBytes("ISO-8859-1").length;
System.out.println("字符串“你好”按照UTF-8编码方式编码的字节数组长度:" + a);
System.out.println("字符串“你好”按照GB2312编码方式编码的字节数组长度:" + b);
System.out.println("字符串“你好”按照ISO-8859-1编码方式编码的字节数组长度:" + c);

结果:

字符串“你好”按照UTF-8编码方式编码的字节数组长度:6
字符串“你好”按照GB2312编码方式编码的字节数组长度:4
字符串“你好”按照ISO-8859-1编码方式编码的字节数组长度:2

相同的英文字符串按照不同的编码方式生成的字节数组长度是相同的,我们可以来测试一下:

int a = "abc".getBytes("UTF-8").length;
int b = "abc".getBytes("GB2312").length;
int c = "abc".getBytes("ISO-8859-1").length;

结果:

字符串“abc”按照UTF-8编码方式编码的字节数组长度:3
字符串“abc”按照GB2312编码方式编码的字节数组长度:3
字符串“abc”按照ISO-8859-1编码方式编码的字节数组长度:3

至于其中的原因就是一个汉字由3个UTF-8编码格式的字节组成,也可以由2个GB2312编码格式的字节组成,而ISO-8859-1编码格式中无论什么字符都会变成1个字节,不过ISO-8859-1不认识汉字,所以我们最终展示成字符串的时候以?展示

对于本题我想说:只有生成相应编码格式的字节数组,然后再把该字节数组按照对应编码格式变成字符串的时候才能成功,例如"你好"按照UFT-8编码方式进行编码,将会获得6个字节的字节数组,你如果使用GB2312将这6个字节组成的字节数组编码成字符串,那其中的2个字节会生成一个字符,最终生成的是3个字符,那最终生成的字符串就乱码了,所以字符串生成字符数组和字符数组变成字符串的字符编码方式需要一致,就像我答案中的那样就是一致的,另外在我给出的答案中,如果你把ISO-8859-1编码格式的字符串b打印出来,你会发现它是??,如下:

在这里插入图片描述
这是因为ISO-8859-1编码方式中没有汉字,它根本不认识字符串"你好",不认识的统统以?代替,这个问题我们上面也提了一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值