zoukankan      html  css  js  c++  java
  • 关于编码的一个笔记

    类型 字节长度 能存多少
    byte 0~255 256
    short 2 byte 65536
    int 4 byte 42亿
    long 8 byte
    float 4 byte
    double 8 byte
    char 2 byte in Java

    Unicode 用 int 存储

    但是,Unicode用四个字节,太过浪费

    码点 : 每个数字代表一个字符,叫做“码点”(code point)

    内码和外码

    1. 内码(internal encoding):某种语言运行时,其char和string在内存中的编码方式

    JVM中内码采用utf-16。早期,utf-16采用固定长度2字节的方式编码,两个字节可以表示65536种符号,足以表示当时unicode中所有字符。但是随着unicode中字符的增加,2个字节无法表示所有的字符,utf-16采用了2字节或4字节的方式来完成编码。Java为应对这种情况,考虑到向前兼容的要求,Java用一对char来表示那些需要4字节的字符。所以,java中的char是占用两个字节,只不过有些字符需要两个char来表示。

    1. 外码(external encoding)):除了内码,皆是外码

    源代码编译产生的目标代码文件(可执行文件或class文件)中的编码方式属于外码。


    Java的class文件采用utf-8来存储字符,也就是说,class中字符占1~6个字节。

    Java序列化时,字符也采用utf-8编码,占1~6个字符。

    Unicode 和 UTF 的区别:

    • Unicode:统一的字符编号,仅仅提供字符与编号间映射
    • UTF :unicode转换格式 (unicode transformation format) 。定义unicode中编号的编码方式。

    常见的两种方式:

    • UTF-16:Java 程序内部的存储方法

    UTF-16为变长表示,长度可能是 2 或 4 个字节

    • UTF-8
      • Mac/Linux 默认编码是 UTF-8
      • Windows 默认的中⽂编码是 GBK

    UTF-8为变长表示,长度可能是 1~6 个字节
    如果没有意外,把所有的编码方案都改成 UTF-8

    utf-16 编码中,英文字符占两个字节;绝大多数汉字(尤其是常用汉字)占用两个字节,个别汉字(在后期加入unicode 编码的汉字,一般是极少用到的生僻字)占用四个字节。

    utf-8 编码中,英文字符占用一个字节;绝大多数汉字占用三个字节,个别汉字占用四个字节。

  • 相关阅读:
    Win10 UWP Tile Generator
    Win10 BackgroundTask
    UWP Tiles
    UWP Ad
    Win10 build package error collections
    Win10 八步打通 Nuget 发布打包
    Win10 UI入门 pivot multiable DataTemplate
    Win10 UI入门 导航滑动条 求UWP工作
    UWP Control Toolkit Collections 求UWP工作
    Win10 UI入门 SliderRectangle
  • 原文地址:https://www.cnblogs.com/pipemm/p/12168077.html
Copyright © 2011-2022 走看看