近期在做项目时,遇到如下问题。先看代码:
package test11;
public class TestStr {
public static void main(String[] args) throws Exception {
byte[] bytE = new byte[]{24, -122, 61, 102, -51, -78, 17, 126};
String str2 = new String(bytE);
byte[] bytE2 = str2.getBytes();
for(byte b:bytE2){
System.out.print(b + ",");
}
}
}
测试结果:
24,63,61,102,-51,-78,17,126,
对于字节数组使用new String(bytE)转换后,再使用String类的getBytes()编码还原,发现编码前后字节数组不一致。经查默认情况下使用UTF-8编码,而UTF-8是可变长度的编码,原来的字节数组就被改变了,而ISO8859-1通常叫做Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中 0~127的字符与ASCII码相同,它是单字节的编码方式,这样第二种方式生成的String里的字节数组就跟原来的字节数组一样(参考文章:
http://blog.csdn.net/jiangxinyu/article/details/8228807)。因此将代码修正为如下,可以正常编码:
package test11;
public class TestStr {
public static void main(String[] args) throws Exception {
byte[] bytE = new byte[]{24, -122, 61, 102, -51, -78, 17, 126};
String str2 = new String(bytE,"ISO-8859-1");
byte[] bytE2 = str2.getBytes("ISO-8859-1");
for(byte b:bytE2){
System.out.print(b + ",");
}
}
}
在String--byte[]--String处理模式中,使用默认或者其它编码格式都可以;但在String--byte[]--byte[]--String--byte[]处理模式中,涉及字节数组被处理成新的字节数组后多次转换传递时,为了避免字节数组变化而影响结果,可以使用ISO-8859-1进行处理。在处理中文时,可以使用GBK或UTF-8,而不能使用ISO-8859-1,否则会出现乱码。因此模式二下同时涉及中文,可以使用两者结合的方式,例如下边的代码:
package test11;
public class TestStr {
public static void main(String[] args) throws Exception {
String str = "张三";
String str1 = new String(str.getBytes("UTF-8"),"ISO-8859-1");
String str2 = new String(str1.getBytes("ISO-8859-1"),"UTF-8");
System.out.println(str2);
}
}
注意:此处使用的是String类的构造方法传入编码方式进行的数据转换
分享到:
相关推荐
在IT领域,字节流(Byte Stream)是数据在计算机内部和网络中传输的基本单位,而编码则关乎数据如何被转换成字节流以便于处理和传输。在处理字节流编码时,我们通常会遇到诸如字符集、字节顺序标记(BOM)、解码与...
说明字符编码在java,c中的转换 说明字符编码在java,c中的转换 说明字符编码在java,c中的转换
本文介绍了字符与编码的发展过程,相关概念的正确理解。举例说明了一些实际应用中,编码的实现方法。然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致...本文的内容涵盖了“中文问题”,“乱码问题”。
在.NET框架中,处理文件流字节编码是一个常见的任务,特别是在进行文件读写、网络传输或者数据序列化等操作时。本文将详细讲解如何在Visual Studio .NET环境下使用不同的类来获取文件流中的字节编码。 首先,我们...
1. **GB2312**:中国国家标准简体中文字符集,包含6763个常用汉字,是最早的汉字编码标准之一,采用双字节编码方式。 2. **GBK**:基于GB2312扩展,增加了对繁体字和其他少数字符的支持,共计20902个字符,同样采用...
这个压缩包文件“RS(7,3)编码和字节交织.rar”似乎包含了一个使用MATLAB编写的程序,该程序用于模拟中国移动多媒体广播(CMMB)标准中的RS(7,3)编码和字节交织过程。 RS(7,3)编码是一种特定的RS编码变体,其中“7”...
单字节、多字节、双字节是三种常见的字符编码方式,它们之间的相互转换是非常必要的。 单字节(SBCS) 单字节字符编码(Single Byte Character Set,SBCS)是一种字符编码方式,每个字符只占用一个字节。这是最...
- 然后通过`WideCharToMultiByte`函数将宽字符字符串转换为多字节编码的字符串。 3. **MBToUnicode** 此函数负责将多字节编码转换为Unicode编码。转换过程类似于`MBToUTF8`,但最终的输出是Unicode编码而不是UTF...
标题中的“在vs2013中默认不再包含对多字节字符编码的支持”指的是Visual Studio 2013在默认配置下不再提供对多字节字符集(MBCS,Multi-Byte Character Set)的开箱即用支持。这在开发过程中可能会对处理非Unicode...
易语言写出文件、写出字节集编码方式
字符和字节编码
在Java编程中,二进制、字节数组、字符、十六进制和BCD(Binary-Coded Decimal,二进制编码的十进制)编码转换是常见的数据处理任务。以下将详细介绍这些概念以及如何在Java中进行相关操作。 1. **二进制与十六进制...
然而,可变字节码并不局限于单个字节,它的核心在于根据数值的大小动态地选择字节数来编码,从而实现高效的数据压缩。 可变字节码的工作原理主要基于以下几点: 1. **编码规则**:对于小数值,可变字节码使用较少...
在本案例中,"易语言字节集头像编码"指的是如何使用易语言来对头像(通常是图片文件)进行字节级的操作,从而实现编码和解码的过程。 首先,头像是指代表个人或角色的图像,通常用于社交媒体、聊天应用等平台的身份...
编码规则可以分为单字节编码、多字节编码和可变长度编码。单字节编码如ASCII,每个字符占用一个字节;多字节编码如ISO-2022-JP、Shift_JIS,根据字符的不同,占用1至n个字节;可变长度编码如UTF-8,根据字符的复杂...
英文半字节压缩编码算法,采用C语言编写的,用于信息论与编码课程
以上四个部分分别详细解释了C++中常见字符编码之间的转换方法,包括多字节编码到UTF-8、UTF-8到多字节编码、多字节编码到Unicode以及Unicode到多字节编码的转换。这些转换过程对于处理不同系统或程序间的数据交互是...
5. **编码转换**:在处理多语言或国际化文本时,可能会遇到不同编码的转换问题。`.NET`提供了多种编码类型,如`Encoding.ASCII`, `Encoding.BigEndianUnicode`, `Encoding.Unicode`, `Encoding.UTF7`, `Encoding.UTF...
GB2312采用了双字节编码方式,每个字符由两个字节表示,前一个字节称为高位字节,后一个字节称为低位字节。高位字节的范围在0xB0到0xF7之间,低位字节在0xA1到0xFE之间。 Unicode,又称万国码,是一种为全球所有...
windows 系统文件 用于修改文档字节编码,iconv.exe的一般用法:iconv.exe -f gbk -t utf-8 gbk.txt > utf-8.txt。其中 -f gbk 指明转换前的文件编码是gbk,-t utf-8 指明转换后的文件编码是utf-8,gbk.txt 是转换前...