Java 应用中,各种编码问题知识点梳理

参考资料:

java 类里判断字符串是iso-8859-1还是gb2312,utf-8,gbk等,判断编码类型

1、判断字符串编码类型

System.out.println(java.nio.charset.Charset.forName("GB2312").newEncoder().canEncode("汉字"));
System.out.println(java.nio.charset.Charset.forName("ISO-8859-1").newEncoder().canEncode("汉字"));

结果:

true
false

GBK、GB2312、UTF-8里边都有汉字编码,所以判断时总是返回true.

2、字符集顺序

从小到大:

ISO-8859-1、GB2312、GBK、UTF-8

    国际标准组织(ISO)定义了几个不同的字符集,它们是在ASCII码基础上增加了其他语言和地区需要的字符

    其中最突出的是ISO-8859-1,通常叫做Latin-1. Latin-1包括了书写所有西方欧洲语言不可缺少的附加字节,其中0~127的字符与ASCII码相同。

3、获取某个字符或汉字在utf-8,gbk,gb2312,iso8859-1下的十六进制,八进制,十进制,二进制的表示

参考资料:字符在utf-8,gbk,gb2312,iso8859-1下的编码实验

4、字符编码在计算机中真正的表示形式?

二进制

5、ISO-8859-1

    iso-8859-1是JAVA网络传输使用的标准字符集,而gb2312是标准中文字符集,

    当你作出提交表单等需要网络传输的操作的时候,就需要把 iso-8859-1转换为gb2312字符集显示,否则如果按浏览器的gb2312格式来解释iso-8859-1字符集的话,由于2者不兼容,所以会是乱码.

6、GB2312

    简体中文编码标准。

    对于GB2312,汉字是双字节的。所谓双字节是指一个双字要占用两个Byte的位置(即16位),分别称为高位和低位。

    中国规定的汉字编码为GB2312,这是强制性的,目前几乎所有的能处理中文的应用程序都支持GB2312。

    GB2312包括了一二级汉字和9区符号,高位从0xa1到0xfe,低位也是从0xa1到0xfe,其中,汉字的编码范围为0xb0a1到0xf7fe。

汉字的另外一种编码方式:GBK

    GBK编码方式是一份规范,不是强制的(GB2312为强制性编码方式)。GBK提供了20902个汉字,它兼容GB2312,编码范围为0x8140到0xfefe。GBK中的所有字符都可以一一映射到Unicode 2.0.

7、GBK

    因为GB2312只有简体字,为了扩充,便有了GBK编码标准。它是GB2312的超集。也就是说,GB2312编码的字符,都可以用GBK的方式解读。Windows默认字符集为GBK。

    GBK编码方式是一份规范,不是强制的(GB2312为强制性编码方式)。GBK提供了20902个汉字,它兼容GB2312,编码范围为0x8140到0xfefe。GBK中的所有字符都可以一一映射到Unicode 2.0.

8、UTF-8、UTF-16、Unicode编码形式

Utf-8是8bit的,UTF-16是16bit,Unicode是UTF-16的形式。

    UTF-16 或 Unicode 是 16-bit 固定长度的编码,并没有比 Big5 或 GB2312 码提供更大的容纳空间。

    而 8-bit 不定长 (variable-length) 的编码每个中文字使用 3 个位元组 (byte)。 这意味着使用 UTF-8 编码的 XML 文件会比使用 Big5 码的文件大上 50%。但是假如使用 ASCII 码的标示 (Markup),文件就不会大这么多了。 标示大约会占文件的 50%。可能要使文件大小减少的方式就是採用 文件压缩了。

9、GB2312、UTF-8中,汉字分别占多少字节?

    GB2312中,汉字占2字节。

    UTF-8编码中,占3字节(3位元组)。

10、ISO-8859-1和GB2312之间的转换

    通常异种语言之间的转换是通过Unicode来完成的。

    假设有两种不同的语言A和B转换的步骤为

    先把A转化为Unicode,再把Unicode转化为B。

Eg:

    有GB2312中有一个汉字“李“,其编码为“C0EE”,欲转化为ISO8859-1编码。

步骤为:

    1)、把“李”字转化为Unicode,得到 “674E”,

    2)、把“674E”转化为ISO8859-1字符。

    当然,这个映射不会成功,因为ISO8859-1中根本就没有与“674E”对应的字符。

11、浏览器表单提交内容乱码的原因?

    iso-8859-1是JAVA网络传输使用的标准字符集,而gb2312是标准中文字符集,

    当你作出提交表单等需要网络传输的操作的时候,就需要把 iso-8859-1转换为gb2312字符集显示,否则如果按浏览器的gb2312格式来解释iso-8859-1字符集的话,由于2者不兼容,所以会是乱码.









转载于:https://my.oschina.net/HIJAY/blog/333295

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值