String text = “字符串”;
byte[] b_utf8 = textgetBytes("UTF-8"); //utf-8
byte[] b_iso88591 = textgetBytes("ISO8859-1"); //iso8859-1
byte[] b_gbk = textgetBytes("GBK"); //gbk
string unicode = getUnicode(text);//unicode
public static String getUnicode(String source) {
String result = "";
for (int i = 0; i < sourcelength(); i++) {
result += "\\u"+IntegertoHexString((int) sourcecharAt(i));
}
return result;
}
ASCII 码
学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等;32~126 是打印字符,可以通过键盘输入并且能够显示出来。
ISO-8859-1(扩展ASCII编码)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(扩展GB2312)全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。
GB18030(兼容GB2312)全称是《信息交换用汉字编码字符集》,是我国的强制标准,它可能是单字节、双字节或者四字节编码,它的编码与 GB2312 编码兼容,这个虽然是国家标准,但是实际应用系统中使用的并不广泛。
Unicode编码集UTF-16 统一采用两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,有很大一部分字符用一个字节就可以表示的现在要两个字节表示,存储空间放大了一倍,在现在的网络带宽还非常有限的今天,这样会增大网络传输的流量,而且也没必要。而 UTF-8 采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由 1~6 个字节组成。
UTF-8 有以下编码规则:
UTF-16 具体定义了 Unicode 字符在计算机中存取方法。UTF-16 用两个字节来表示 Unicode 转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,两个字节是 16 个 bit,所以叫 UTF-16。UTF-16 表示字符非常方便,每两个字节表示一个字符,这个在字符串 *** 作时就大大简化了 *** 作,这也是 Java 以 UTF-16 作为内存的字符存储格式的一个很重要的原因。
ISO 试图想创建一个全新的超语言字典,世界上所有的语言都可以通过这本字典来相互翻译。可想而知这个字典是多么的复杂,关于 Unicode 的详细规范可以参考相应文档。Unicode 是 Java 和 XML 的基础,下面详细介绍 Unicode 在计算机中的存储形式。
UTF-16
UTF-8
如果一个字节,最高位(第 8 位)为 0,表示这是一个 ASCII 字符(00 - 7F)。可见,所有 ASCII 编码已经是 UTF-8 了。
如果一个字节,以 11 开头,连续的 1 的个数暗示这个字符的字节数,例如:110xxxxx 代表它是双字节 UTF-8 字符的首字节。
如果一个字节,以 10 开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节
详情传送门至:网页链接
outwrite(sgetBytes("ISO-8859-1"));
这条语句是说,将s按照ISO-8859-1编码的方式进行编码转换,而ISO-8859-1编码是单字节拉丁字符编码(即ASCII编码),会把双字节的中文编码转换成单字节,丢失了一个字节,一般的转换成了单字节后,该字节对应的十六进制数是3F,该数对应ASCII编码的?所以,结果是一串问号;其实,你在把数据写入到文件,已经发生了丢失了数据!所以最后是乱码!!
现在解释为什么123正常显示,字符串在java中是以Unicode编码方式进行编码的,该编码方式占2个字节,对于123这3个字符,其实也占有了6个字节,在进行编码转换的过程中,也丢失了一个字节,丢失的是高字节,保留了低字节,同时Unicode编码是兼容ASCII码的,所以可以认为没有发生字节丢失,读取的时候,只要是以兼容ASCII码的编码方式读取,基本上不会出现乱码!
如有不清楚地方,欢迎继续追问!!
以上就是关于怎么用java把一个字符串进行utf8编码全部的内容,包括:怎么用java把一个字符串进行utf8编码、JAVA几种常见的编码格式、java中的类 FileReader读取字符了,其读取字符需要指定字符的编码规则吧,那么是怎么指定的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)