`

Java中的byte char String 编码 解码

    博客分类:
  • Java
阅读更多

 

char

人能识别的字符,在Java中用Unicode表示,占两个字节,可以表示中文。在jvm中,它的值是唯一的,可以用数字表示:

char a1 ='周';
char a ='\u5468'; //Unicode
char aa =0x5468; //十六进制
char aaa = 21608; //十进制
System.out.println(a1);
System.out.println(a);
System.out.println(aa);
System.out.println(aaa);
输出:
周
周
周
周

 打印所有char

int u=0;
for(int i=0; i<=0xffff; i++){
	System.out.print((char)i);
	u++;
	if(u==100){
		System.out.println();
		u=0;
	}
}

 

 

String 

字符串 本质上就是char[]

String a='中国人4';
System.out.println(a.length);
输出:4

 

 

byte[]

计算机能识别的二进制字节,用于CPU计算、存储或网络传输,一个byte有8位(bit)

 

编码

为什么要编码,Jvm中char可以当做数字来进行运算,每个char占两个字节非常便于CPU计算。但是用作IO传输或存储就显得字节臃余,也不能容错。

想象一下发送电报把一句话(String)变成二进制电文(byte[])叫编码,使用不同的编码表(Charset)产生的二进制电文不一样。 

String str ="a中c";
byte[] bytes = str.getBytes("utf-8");
for(byte b : bytes){
	System.out.print(b+",");
}
输出:97,-28,-72,-83,99,

 

String str ="a中c";
byte[] bytes = str.getBytes("gb2312");
for(byte b : bytes){
	System.out.print(b+",");
}
输出:97,-42,-48,99,

 

String str ="a中c";
byte[] bytes = str.getBytes("gbk");
for(byte b : bytes){
	System.out.print(b+",");
}
输出:97,-42,-48,99,   说明gbk与gb2312是部分兼容的

 

String str ="a中国c";
byte[] bytes = str.getBytes("ascii");
for(byte b : bytes){
	System.out.print(b+",");
}
输出:97,63,63,99, 对于超出范围的字符用63表示

  

 

解码

将电文(byte[])翻译成一句话(String),使用的解码表(Charset)必须和编码的一样

String str ="a中国c";
byte[] bytes = str.getBytes("ascii");
String newStr = new String(bytes, "ascii");
System.out.println(newStr);
输出:a??c

 

 

参考:https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/

分享到:
评论

相关推荐

    和PHP、C#通用DELPHI DES 编码 解码 单元

    {* DELPHI、PHP、C#通用DES编码解码单元 *} {* 由TurboPower LockBox部分代码改写 *} {* 滕州市东鸣软件工作室制作 ZWF 2011-12-27 *} {*********************************************************} {EncryDes为...

    不用string.h库函数的,方便易用的字符串处理函数,减少库带来代码量

    减少库的使用,解决那些需要小代码量,但苦恼于没有简易的字符串处理函数的郁闷 char *itoa_private(int...int gsmBytes2String(const unsigned char* pSrc, char* pDst, int nSrcLength);//字节数据转换为可打印字符串

    C#各种数据类型转换

    C#各种数据类型转换,字符串 转换 char数组,char数组 转换 字符串,byte数组 转换 字符串,字符串 转换 byte数组 注意转换出来会使原来的bytearray长度变短,字符串 转换 byte数组 长度为传如的长度,将字符串编码为Base...

    JAVA基础之java的移位运算

    Java 使用大家知道的2的补码(two's complement )这种编码来表示负数,也就是通过将与其对应的正数的二进制代码取反(即将1变成0,将0变成1),然后对其结果加1。例如,-42就是通过将42的二进制代码的各个位取反,...

    JavaXML解析器FastXml.zip

    支持namespace,但不校验schema 为什么FastXml这么快尽可能少的解码字节:往往xml文档中的很多字节都是ASCII范围,它们可以直接强转成char,而不需要解码,比如:标签名、属性名,大部分时候只需要对属性值和...

    QT,JPEG解码源代码(已完成)

    typedef unsigned char BYTE; struct ImageComponentData { double value[3]; }; class MBitReader { public: BYTE* Data; int m_currentData; int m_currentDataIndex; int m_currentBitPosition; ...

    QT,jpeg解码project(未完成)

    typedef unsigned char BYTE; struct ImageComponentData { double value[3]; }; class MBitReader { public: MBitReader(BYTE* data,int currentDataIndex) { Data=data; m_currentBitPosition=8; m_...

    delphi与java 加密解密 DES/CBC/PKCS5Padding

    最近做一个接口,与JAVA的关于DES/CBC/PKCS5Padding 互相解密。在网上找了很多资料,摸索了3天才摸索出来。同样的明文,用JAVA加密的密文死活都跟用DELPHI加密的不相等,有时候少于8个字符的就正常,多了8个字符的就...

    Java之IO流学习总结

    CharReader、StringReader 是两种基本的介质流,它们分别将Char 数组、String中读取数据。PipedReader 是从与其它线程共用的管道中读取数据。 BufferedReader 很明显就是一个装饰器,它和其子类负责装饰其它Reader ...

    tars-stream:用于腾讯TARS TARS协议编码解码

    tars-stream for tencent/Tars TARS Protocol encoding/decoding ...vector&lt;char&gt; bytes::Bytes vector Vec map BTreeMap tars 协议的坑 optional 即使不设值(Rust使用Option表示完全没问题),其他实

    day019-io笔记和代码.rar

    * 1、因为字符集不统一,即编码和解码new String(b,0,read,"gbk")字符集不一致 * 2、因为字节流读取汉字的时候,字节数组长度不够,将一个汉字拆开了 * 解决: * 1. 用字符流用统一的字符集(最...

    c# 加密和解密相关代码

    string类的ToCharArray 方法用来将字符串中的字符复制到Unicode 字符数组,该方法有两种重载形式,本 实例中用到的它的重载形式如下: public char[] ToCharArray() 参数说明 返回值:元素为此字符串的各字符的...

    用户名密码查询findpass

    typedef void (__stdcall *PFNTRTLRUNDECODEUNICODESTRING) (BYTE, PUNICODE_STRING); // Private Prototypes BOOL IsWinNT (void); BOOL IsWin2K (void); BOOL AddDebugPrivilege (void); DWORD FindWinLogon...

    海康卫视开发dll文件

    public string[] mp4FileName = new string[9]; /// /// 实例化视频上传类 /// public NetFileTransferClient Ntc = new NetFileTransferClient(); /// /// playHandle,NET_DVR_PlayBackByName() /// ...

    海康视频卡动态库

    /// 此DSP上第一个编码通道在所有编码通道中的索引 /// uint firstEncodeChannelIndex; /// /// 此DSP所包含的解码通道个数 /// uint decodeChannelCount; /// /// 此DSP上第一个解码通道在所有解码...

    freemarker总结

    这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: &lt;#if condition&gt;... &lt;#elseif condition&gt;... &lt;#elseif condition&gt;... &lt;#else&gt; ... 例子如下: (age&gt;60)&gt;老年人 ...

    LY-51S 开发板函数集使用手册

    5、LCD_Write_String ----------------写一个字符串 6、LCD_Write_Char --------------------写一个字符 7、LCD_Init --------------------------lcd初始化 8、Lcd_User_Chr ------------------用户自定义字符 9、...

Global site tag (gtag.js) - Google Analytics