zoukankan      html  css  js  c++  java
  • Java的char是16位的unicode类型

    • Java的char是16位的unicode类型,中文也是,两个字节,但是如果用utf-8(一般系统默认)读取或者转换为字节数组,就会变成3个字节。
    • Unicode是字符集,UTF-8/UTF-16是编码规则,或者广义的Unicode就包括字符集和多种编码规则。也就是说字符集规定了每个字符的二进制代码,编码规则才规定了如何存储这些二进制代码。
    • 然后utf-16有个大端序(Big Endian order)和小端序(Little Endian order)的问题(utf-8的更复杂,所以这也是最好不要在windows下编程的原因)。
    • 在Java中,对于一个中文字符的char,getByte的结果,如果不指定编码规则,则默认是UTF-8,一个中文3个字节,如果是unicode或者utf-16,默认是4个字节,前两个字节0xFEFF表示大端序,0xFFEF表示小端序,如果指定了utf-16be或者utf-16le,就是2个字节
    package IOTest;
    
    import javax.management.StandardEmitterMBean;
    import java.io.UnsupportedEncodingException;
    import java.nio.charset.Charset;
    import java.nio.charset.StandardCharsets;
    
    public class CharTest {
        public static void main(String[] args) throws UnsupportedEncodingException {
            //Java的char是两字节的Unicode字符(0-65535)
            char b='中';
            System.out.println((int)b);
            byte[] bs=char2Byte(b);
            System.out.println(byte2HexString(bs));
            byte[] cs=String.valueOf(b).getBytes("unicode");
            byte[] ds=String.valueOf(b).getBytes(StandardCharsets.UTF_16BE);
            byte[] es=String.valueOf(b).getBytes(StandardCharsets.UTF_16LE);
            byte[] fs=String.valueOf(b).getBytes(StandardCharsets.UTF_16);
            byte[] gs=String.valueOf(b).getBytes(StandardCharsets.UTF_8);
            System.out.println(byte2HexString(cs));
            System.out.println(byte2HexString(ds));
            System.out.println(byte2HexString(es));
            System.out.println(byte2HexString(fs));
            System.out.println(byte2HexString(gs));
        }
        public static byte[] char2Byte(char c){
            byte[] ans=new byte[2];
            ans[1]=(byte)(c&0x00ff);
            ans[0]=(byte)((c&0xff00)>>8);
            return ans;
        }
        public static String byte2HexString(byte[] bs){
            StringBuilder sb=new StringBuilder();
            for(byte b:bs){
                int c=b&0x0f;
                if(c<10){
                    sb.append(c);
                }else{
                    sb.append((char)((c-10)+'A'));
                }
                c=(b&0xf0)>>4;
                if(c<10){
                    sb.append(c);
                }else{
                    sb.append((char)((c-10)+'A'));
                }
                sb.append(' ');
            }
            return sb.toString();
        }
    }
    
    
  • 相关阅读:
    four day (linux基础学习1)
    three day(网络基础)
    two day(操作系统)
    Oldboy One day(计算机基础)
    mybatis调用存储过程
    调用jiathis分享接口
    汉字转换拼音工具类
    Ajax前后台交互 返回普通格式和JSON格式
    Bootstrap与EasyUI入门
    MD5,sha1加密工具类
  • 原文地址:https://www.cnblogs.com/zxcoder/p/12571295.html
Copyright © 2011-2022 走看看