java extract iso_【技术累积】【点】【Java】【12】几种常见编码(持续更新)

问题描述

有这么一段代码:

String question = new String(record.getQuestion().getBytes("iso-8859-1"), "UTF-8");

所以是什么意思呢?

问题解答

可以拆分为两句来看

byte[] bytes = record.getQuestion().getBytes("iso-8859-1");

String question = new String(bytes,"UTF-8");

就是先获取“iso-8859-1”编码格式下的bytes,然后转化为“UTF-8”编码下的String。

关于getBytes

import java.io.*;

public class Test {

public static void main(String args[]) {

String Str1 = new String("runoob");

try{

byte[] Str2 = Str1.getBytes();

System.out.println("返回值:" + Str2 );

Str2 = Str1.getBytes( "UTF-8" );

System.out.println("返回值:" + Str2 );

Str2 = Str1.getBytes( "ISO-8859-1" );

System.out.println("返回值:" + Str2 );

} catch ( UnsupportedEncodingException e){

System.out.println("不支持的字符集");

}

}

}

//返回值:[B@7852e922

//返回值:[B@4e25154f

//返回值:[B@70dea4e

说说常见的几种编码

ISO8859-1

比较老的一种编码了:

单字节,定长;

向下兼容ASCII码;

无法表示中文;

能保存各种语言,若要展示为中文,可转译为当前正常显示的码值;

由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用iso8859-1编码来表示。而且在很多协议上,默认使用该编码。比如,虽然"中文"两个字不存在iso8859-1编码,以gb2312编码为例,应该是"d6d0 cec4"两个字符,使用iso8859-1编码的时候则将它拆开为4个字节来表示:"d6 d0 ce c4"(事实上,在进行存储的时候,也是以字节为单位处理的)。而如果是UTF编码,则是6个字节"e4 b8 ad e6 96 87"。很明显,这种表示方法还需要以另一种编码为基础。

GB2312/GBK

展示汉字专用;

前者只能展示简体;

双字节定长编码;

英文字母和ISO8859-1一致(对ISO8859-1兼容)

unicode

双字节定长编码;

不兼容ISO8859-1;

可以表示所有语言;

java默认编码;

utf

是Unicode Transformation Format的缩写,意为Unicode转换格式;

多种编码,utf-8,utf-16,utf-32;数字不一样,表示最小表示的长度不同;

举例utf-8,用1-6个字节(8)表示所有字符;

utf-32是定长编码,4字节,只用到3字节,多的是为了拓展;其他是非定长编码;

utf-8表示英文等拉丁文系最有效率,中文网站之所以有很多还是用的utf-8,是代码都是英文这些。。。

一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值