UTF-8 GBK UTF8 GB2312之间的区别和关系,Java中String和byte[]间的转换,byte 是怎样转为汉字,汉字转byte的;char与

简介: UTF-8 GBK UTF8 GB2312之间的区别和关系,Java中String和byte[]间的转换,byte 是怎样转为汉字,汉字转byte的;char与

UTF-8 GBK UTF8 GB2312之间的区别和关系



gbk和utf-8就好比ascii一样一个特定数对应一个字符,gbk和utf-8比ascii要大得多;


1、GBK通常指GB2312编码 只支持简体中文字

2、utf通常指UTF-8,支持简体中文字、繁体中文字、英文、日文、韩文等语言(支持文字更广)

3、通常国内使用utf-8和gb2312,看自己需求选择


UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。

GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大。


80220a5fe6344225ba068436533d59ef_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


Java中String和byte[]间的转换



byte[] byteArray = {'w'};
        String str = new String(byteArray);
        byte[] qun = str.getBytes();
        String coding = "GBK";
        String ceshi = "张继";
        byte re[] = ceshi.toString().getBytes(coding);
        String re1 = new String(re,coding);
        System.out.println(qun);
        System.out.println(re.toString());
        System.out.println(re1);
        System.out.println(ceshi.hashCode());
        System.out.println(System.identityHashCode(qun));
        System.out.println(System.identityHashCode(re));

byte 是怎样转为汉字,汉字转byte的;通过的就是gbk和utf-8,


GBK-unicode对照:GBK-unicode对照_楼边斜月为明的博客-CSDN博客

张:张    (gbk) d5c5      5f20

解说:“张”的byte:-43,-59  这是byte直接输出,转为int 输出是213,103,再转为16进制:  d5c5就是GBK的:张


char与byte的区别


byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 。


char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 );大小范围 是0—65535 ;


char是一个16位二进制的Unicode字符,JAVA用char来表示一个字符 。

相关文章
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`"123abc"`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
【Java基础面试二十六】、说一说String和StringBuffer有什么区别
这篇文章区分了Java中的String和StringBuffer类:String是不可变类,一旦创建字符序列就不能改变;而StringBuffer代表可变的字符串,可以通过其方法修改字符序列,最终可以通过`toString()`方法转换为String对象。
【Java基础面试二十六】、说一说String和StringBuffer有什么区别
|
前端开发 Java
成功解决:java.lang.String cannot be cast to java.lang.Integer
这篇文章记录了作者在使用Axios二次封装时遇到的一个Java类型转换问题,即前端传递的字符串参数不能直接转换为Integer类型,文章提供了正确的转换方法来解决这个问题。
成功解决:java.lang.String cannot be cast to java.lang.Integer
|
安全 Java API
Java系类 之 String、StringBuffer和StringBuilder类的区别
这篇文章讨论了Java中`String`、`StringBuffer`和`StringBuilder`三个类的区别,其中`String`是不可变的,而`StringBuffer`是线程安全的可变字符串类,`StringBuilder`是非线程安全的可变字符串类,通常在单线程环境下性能更优。
Java系类 之 String、StringBuffer和StringBuilder类的区别
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
4023 1
|
Java
Java中将保留四位小数的Double转换为String的方法详解
选择合适的方法,可以使代码更加简洁、高效,同时也能满足不同场景下的需求。
852 5
|
安全 Java 索引
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
340 2
|
安全 Java
Java基础之StringBuffer
【7月更文挑战第1天】 Java中的`StringBuffer`是线程安全的字符串操作类,适合多线程环境,而`StringBuilder`非线程安全,速度更快,适用于单线程。两者提供`append()`、`insert()`、`delete()`等方法修改字符串,避免了频繁创建新对象的性能问题。在不需要线程安全时,推荐使用`StringBuilder`以提高效率。
219 1
|
Java API 索引
java中String类常用API
java中String类常用API