• Java中Unicode字符集和UTF8,UTF16编码


    Unicode和UTF16

    Unicode是字符集,但是Unicode不规定如何存储,即到底几个字节为一组对应一个字符;
    UTF16是Unicode字符集的一种编码方式,通过”提示位“标识几个字节编为一组,这样就可以实现字符的存储和读取了;
    位于 D800~0xDFFF 之间的 Unicode 编码是特别为四字节的 UTF-16 编码预留的,所以不应该在这个范围内指定任何字符。如果你真的去查看 Unicode 字符集,会发现这个区间内确实没有收录任何字符。
    基本转换步骤如下:
    将代码点减去 0x10000,仅保留低 20 位;
    将高 10 位加上 0xD800,得到高代理;
    将低 10 位加上 0xDC00,得到低代理;

    Java程序内部使用UTF16编码

    Java程序在内存中使用UTF16编码转换字符为数字进行存储,所以char类型可以隐式转换为int;

    int n = '你';
    System.out.println(n);
    // 20320
    System.out.println(Integer.toHexString(n));
    // 4f60
    System.out.println("u4f60");
    // 你
    

    但随着unicode字符数量增加,2字节已经不够了,所以char类型16位长度无法表示所有字符,很多字符需要用两个char来表示

    UTF8编码

    编码方式指的是如何将字符转化为字节,同时将字节转化为字符;
    UTF8也是一种,将Ascii码字符转为1个字节,将汉字转为3个字节,通常存储和传输用的比较多。

    Java的getBytes()

    Bytes是8位整数,getBytes()即将字符通过UTF16编码为数字然后拆成8位Byte字节数组,Bytes是有符号的,所以会有负数。

     for (Byte b:"你".getBytes()) {
         System.out.println(b);
     }
     // -28
     // -67
     // -96
    
  • 相关阅读:
    基于pytest实现appium多进程兼容性测试
    git中的常用命令
    刷题(四)
    appium server命令行启动
    pytest添加运行失败截图和使用自定义的css
    fixture的参数化
    Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:25:5-27:41 to override.
    svn代码管理器
    把Model改成Lib
    com.baidu.mapapi.CoordType
  • 原文地址:https://www.cnblogs.com/Peter2014/p/12715448.html
Copyright © 2020-2023  润新知