• java中是如何解决编码问题的,比如char类型的对象是如何存储的呢?


    主题句:每个编码形式将字符从字符集转换为编码数据。

     1 说白了一个代码点就是一个Unicode字符。代码单元就是代码点的集合。
     2 字符视图
     3 要了解字符集标准,您必须能区分三种不同的字符视图: 
     4 
     5 字符集(字符的抽象列表)。 
     6 作为带标量值的“代码点”的字符。 
     7 作为编码数据的字符。 
     8 字符集(字符的抽象列表)
     9 
    10 字符集是各种文字(包括拉丁文、西里尔文、中文、朝鲜语、日语、希伯来语和阿拉伯语)中所包含的字符的一个抽象列表,由一百多万个字符组成。字符集还包括其他符号,例如音符。
    11 
    12 Unicode 和 GB18030 标准都具有字符集。当某个标准添加了新字符时,为了保持对等,另一个标准也将添加这些字符。
    13 
    14 作为带标量值的“代码点”的字符
    15 
    16 注意   这第二个字符视图只适用于 Unicode,而不适用于 GB18030。
    17 字符集中的每个字符都被分配到一个“代码点”。每个代码点都有一个特定的数值,称为标量值。该标量值通常用十六进制表示。
    18 
    19 代码点存在于“代码空间”中。代码空间由许多标量值组成,这些值被划分在两个平面中: 
    20 
    21 基本多语种平面(64k 大小)。 
    22 在 Unicode 中,此下平面中的值的十六进制表示位于 U+0000 到 U+FFFF 的范围中。 
    23 
    24 辅助多语种平面(16 个 64k 大小的附加节)。 
    25 在 Unicode 中,此上平面中的值的十六进制表示位于 U+10000 到 U+10FFFF 的范围中。 
    26 
    27 所有可能的标量值的完整代码空间的大小为 17 * 64k(1,088,000 个可能值)。
    28 
    29 作为编码数据的字符
    30 
    31 每个编码形式将字符从字符集转换为编码数据。
    32 
    33 在 GB18030 中,编码数据直接从字符集派生:标量值(作为字符集和编码数据之间的媒介)的概念只适用于 Unicode。
    34 
    35 在 Unicode 中,通过向标量值应用某个算法来派生编码数据。
    36 
    37 Unicode 定义了三种字符编码形式: 
    38 
    39 UTF-8 
    40 UTF-16 
    41 UTF-32 
    42 代码点和代码单元
    43 
    44 在每种编码形式中,代码点被映射到一个或多个代码单元。
    45 
    46 注意   有关代码点的概述,请参见上一节字符视图。
    47 “代码单元”是各个编码形式中的单个单元。代码单元的大小等效于特定编码的位数测量单位: 
    48 
    49 UTF-8 中的代码单元由 8 位组成。 
    50 UTF-16 中的代码单元由 16 位组成。 
    51 UTF-32 中的代码单元由 32 位组成。 
    52 GB18030 中的代码单元由 8 位组成。 
    53 每个代码点中的代码单元数
    54 
    55 映射到代码点所需的代码单元数根据编码形式而有所不同: 
    56 
    57 UTF-8 
    58 在 UTF-8 中,因为代码单元较小的缘故,每个代码点常常被映射到多个代码单元。代码点将被映射到一个、两个、三个或四个代码单元。 
    59 
    60 UTF-16 
    61 UTF-16 的代码单元大小是 8 位代码单元的两倍。所以,标量值小于 U+10000 的代码点被编码到单个代码单元中。 
    62 
    63 对于标量值大于或等于 U+10000 的代码点,每个代码点需要两个代码单元。在 UTF-16 中,这些代码单元对有一个独特的术语:“Unicode 代理对”。 
    64 
    65 注意   下面对 Unicode 代理对的支持进行了讨论。
    66 UTF-32 
    67 UTF-32 中使用的 32 位代码单元足够大,每个代码点都可编码为单个代码单元。 
    68 
    69 GB18030 
    70 在 GB18030 中,因为代码单元较小的缘故,每个代码点常常被映射到多个代码单元。代码点将被映射到一个、两个或四个代码单元。 
    71 
    72 对 Unicode 代理对的支持
    73 
    74 某些受 Unicode 支持的文字包含代码点的标量值大于或等于 U+10000 的字符。在 UTF-16 中,通过使用代理对来对这些代码点进行编码。
    75 
    76 正确处理 Unicode 代理对非常重要。例如,当您在使用 UTF-16 编码的应用程序中处理文本时,如果要添加、删除或选择字符以进行剪切、复制或粘贴操作,文本光标必须将每个代码点作为单个文本字符导航。


  • 相关阅读:
    Opencv3.4:显示一张图片
    Windows编译Opencv
    FFmpeg4.0笔记:rtsp2rtmp
    FFmpeg4.0笔记:file2rtmp
    Ubuntu编译安装crtmp-server
    python笔记:#014#综合应用
    python笔记:#012#函数
    Python学习--利用scapy库实现ARP欺骗
    metasploit——(三)渗透攻击之旅
    metasploit——(一)情报收集篇
  • 原文地址:https://www.cnblogs.com/meihao1989/p/3265284.html
Copyright © 2020-2023  润新知