java 字符串用什么编码格式 请问java如何改变字符串的编码方式
大家好,今天小编来为大家解答以下的问题,关于java 字符串用什么编码格式,请问java如何改变字符串的编码方式这个很多人还不知道,现在让我们一起来看看吧!
怎么 知道 java字符串 编码格式
这样的测试方法是不正确的。getBytes(charset)是解码,new String(byte[], charset)是编码。new String(str.getBytes(charset),charset)是解码再编码,无论charset是什么编码格式,返回的字符串内容原始str是一致,因此equals方法都是返回true,达不到测试字符串编码格式的目的。个人观点:正确的测试姿势应该是这样的:
Stringcharset="xxx";//假定编码格式
Stringstr="中文";
booleanflag=str.equals(newString(str.getBytes(),charset));
flag为true则表明str的编码格式是假定的编码格式。其中说明str.getBytes()该方法就是按其自身编码格式去解码。其自身编码格式跟你的操作系统编码格式或你使用的IDE设置的文件的Text file encoding有关。
java 判断字符串什么编码类型
如果是Java的String对象的话,则一定是Unicode的,这个没有为什么,Java就是这么定的。
我猜你的问题应该是如何判断一段字节流是什么编码类型,对吗?比如一个文件,或是网络上面取下来的一段Byte数组,你需要用一个合适的编码来解析成字符串。
这个让你失望了,没有一个文档化的,确定的方法来判断,只能用测试的方法,这个方法也只是猜测,不能百分百的确定,方法如下:
用常见的编码方式对字节流进行解码,比如Unicode,UTF8, UTF8 without BOM, UTF16, ANSI等等。
对解析的结果进行判断,是不是一个合理的可打印字符,可打印字符最多的解码方式就是最可能的编码了。
如何判断可打印字符?流程如下:把解析好的字符串按照字符进行遍历,把每一个字符转化成Unicode编码,看看这些编码是不是Unicode的支持范围极客。
如果发现有种编码方式都是可打印字符,那么再使用本步骤:对字符串进行分词,分词这个在此不作赘述,你自己再研究一下。分词效果好的就是最可能的编码了。(不过通常到第三步就能搞定了,第四部绝大部分用不着)
请问java如何改变字符串的编码方式
byte[] b=string.getBytes("GB2312");//使用GB2312编码方式对字符串string进行编码
//这时要想将字节数组b的内容正确解码只能使用GB2312的编码方式进行解码,即
String str=new String(b,"GB2312");//这里若使用UTF-8编码方式来进行解码就会乱码
//将eclipse默认的编码方式改为UTF-8,只是用该编码方式对.java源文件进行编码保存
//这个对new String(string.getBytes("GB2312"),"UTF-8")没啥影响的
//因为从java源文件获取字符串string时,已经通过UTF-8编码方式进行解码了
//而string.getBytes("GB2312")是使用指定的编码方式对字符串string进行从新编码
//这两者之间没啥关系的
Java几种常见的编码格式
ASCII码
学过计算机的人都知道 ASCII码,总共有 128个,用一个字节的低 7位表示,0~31是控制字符如换行回车删除等;32~126是打印字符,可以通过键盘输入并且能够显示出来。
ISO-8859-1
128个字符显然是不够用的,于是 ISO组织在 ASCII码基础上又制定了一些列标准用来扩展 ASCII编码,它们是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1涵盖了大多数西欧语言字符,所有应用的最广泛。ISO-8859-1仍然是单字节编码,它总共能表示 256个字符。
GB2312
它的全称是《信息交换用汉字编码字符集基本集》,它是双字节编码,总的编码范围是 A1-F7,其中从 A1-A9是符号区,总共包含 682个符号,从 B0-F7是汉字区,包含 6763个汉字。
GBK
全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940个码位,它能表示 21003个汉字,它的编码是和 GB2312兼容的,也就是说用 GB2312编码的汉字可以用 GBK来解码,并且不会有乱码。
GB18030
全称是《信息交换用汉字编码字符集》,是我国的强制标准,它可能是单字节、双字节或者四字节编码,它的编码与 GB2312编码兼容,这个虽然是国家标准,但是实际应用系统中使用的并不广泛。
UTF-16
说到 UTF必须要提到 Unicode(Universal Code统一码),ISO试图想创建一个全新的超语言字典,世界上所有的语言都可以通过这本字典来相互翻译。可想而知这个字典是多么的复杂,关于 Unicode的详细规范可以参考相应文档。Unicode是 Java和 XML的基础,下面详细介绍 Unicode在计算机中的存储形式。
UTF-16具体定义了 Unicode字符在计算机中存取方法。UTF-16用两个字节来表示 Unicode转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,两个字节是 16个 bit,所以叫 UTF-16。UTF-16表示字符非常方便,每两个字节表示一个字符,这个在字符串操作时就大大简化了操作,这也是 Java以 UTF-16作为内存的字符存储格式的一个很重要的原因。
UTF-8
UTF-16统一采用两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,有很大一部分字符用一个字节就可以表示的现在要两个字节表示,存储空间放大了一倍,在现在的网络带宽还非常有限的今天,这样会增大网络传输的流量,而且也没必要。而 UTF-8采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由 1~6个字节组成。
UTF-8有以下编码规则:
如果一个字节,最高位(第 8位)为 0,表示这是一个 ASCII字符(00- 7F)。可见,所有 ASCII编码已经是 UTF-8了。
如果一个字节,以 11开头,连续的 1的个数暗示这个字符的字节数,例如:110xxxxx代表它是双字节 UTF-8字符的首字节。
如果一个字节,以 10开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节
Java中需要编码的场景
前面描述了常见的几种编码格式,下面将介绍 Java中如何处理对编码的支持,什么场合中需要编码。
I/O操作中存在的编码
我们知道涉及到编码的地方一般都在字符到字节或者字节到字符的转换上,而需要这种转换的场景主要是在 I/O的时候,这个 I/O包括磁盘 I/O和网络 I/O,关于网络 I/O部分在后面将主要以 Web应用为例介绍。
好了,关于java 字符串用什么编码格式和请问java如何改变字符串的编码方式的问题到这里结束啦,希望可以解决您的问题哈!