唐宋元明清 唐宋元明清
首页
  • 基础

    • Java基础
  • 工具

    • hutool
    • commons
  • 框架

    • Spring Boot相关
  • 设计模式

    • 设计模式入门
  • Hadoop

    • Hadoop分布式搭建
    • Hadoop高可用搭建
    • 集群端口
    • 代码demo
  • Zookeeper

    • Zookeeper集群搭建
  • Hive

    • Hive集群搭建
    • Hive相关
    • HSQL
  • Kafka

    • Kafka集群搭建
  • HBase

    • HBase集群搭建
    • HBase基础学习
  • Spark

    • Spark环境搭建
    • Spark相关知识
  • Flink

    • Flink环境搭建
    • Flink学习
  • Flume

    • Flume安装配置
    • Flume高可用集群安装
    • Flume相关学习
  • Sqoop

    • Sqoop安装配置
    • Sqoop使用
  • 其他

    • docker
  • Oracle

    • Oracle相关知识杂记
    • 系统函数篇
    • 与MySQL语法区别
  • MySQL

    • MySQL知识点
  • Python

    • Python简单语法
    • Python操作Office
    • Python类库学习
    • Python爬虫
  • Shell

    • Shell基础
    • Shell命令行
  • Scala

    • 语法学习
  • 正则表达式

    • 正则基础
  • 调度

    • 调度工具
  • 前端

    • 前端相关
  • 杂记

    • 常用工具或网站
    • 琐碎知识
  • 摘录

    • 摘录
GitHub (opens new window)
首页
  • 基础

    • Java基础
  • 工具

    • hutool
    • commons
  • 框架

    • Spring Boot相关
  • 设计模式

    • 设计模式入门
  • Hadoop

    • Hadoop分布式搭建
    • Hadoop高可用搭建
    • 集群端口
    • 代码demo
  • Zookeeper

    • Zookeeper集群搭建
  • Hive

    • Hive集群搭建
    • Hive相关
    • HSQL
  • Kafka

    • Kafka集群搭建
  • HBase

    • HBase集群搭建
    • HBase基础学习
  • Spark

    • Spark环境搭建
    • Spark相关知识
  • Flink

    • Flink环境搭建
    • Flink学习
  • Flume

    • Flume安装配置
    • Flume高可用集群安装
    • Flume相关学习
  • Sqoop

    • Sqoop安装配置
    • Sqoop使用
  • 其他

    • docker
  • Oracle

    • Oracle相关知识杂记
    • 系统函数篇
    • 与MySQL语法区别
  • MySQL

    • MySQL知识点
  • Python

    • Python简单语法
    • Python操作Office
    • Python类库学习
    • Python爬虫
  • Shell

    • Shell基础
    • Shell命令行
  • Scala

    • 语法学习
  • 正则表达式

    • 正则基础
  • 调度

    • 调度工具
  • 前端

    • 前端相关
  • 杂记

    • 常用工具或网站
    • 琐碎知识
  • 摘录

    • 摘录
GitHub (opens new window)
  • Python

    • Python简单语法学习
    • Python操作Office
    • Python类库学习
    • 自己写的python程序(减少工作量)
    • Python爬虫
  • Shell

    • Shell基础
    • Shell命令行
  • Scala

    • 语法学习
  • 正则表达式

    • 正则基础
  • 前端

    • 前端相关
  • 资料

    • 资料
  • 杂记

    • 常用工具或网站
    • 琐碎知识
      • 快捷键
      • FAQ
    • 摘录

      • 摘录
    • 其他
    • 杂记
    Ai
    2022-03-08
    目录

    琐碎知识

    # 1、英文缩写

    # Python

    简称 全称
    pip package installer for python

    # Oracle

    简称 全称
    CLOB Character Large Object
    BLOB binary large object

    # 服务器

    简称 全称
    NTP 网络时间协议,英文名称:Network Time Protocol(NTP)

    NTP 配置

    # 2、html实体

    & <等字符 参考链接 (opens new window)

    # 3、位运算的运用

    # 与运算

    # 判断奇偶

    判断int型变量a是奇数还是偶数

    a & 1 = 0 // 偶数
    a & 1 = 1 // 奇数
    
    # 取数指定位(指定位置0)

    取一个数的指定位

    // 1. 取int型变量a(二进制)的第k位
    a >> k & 1  // 先右移k位,与1后取出第k位
    
    // 2. 
    // 比如取数 X=1010 1110 的低4位,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行按位与运算(X&Y=0000 1110)即可得到X的指定位。
    
    # 平均值

    整数的平均值

    int average(int x, int y)
    {   
         return (x&y)+((x^y)>>1);
    }
    
    # 判断整数是不是2的幂

    判断一个整数是不是2的幂

    boolean power2(int x)
    {
        return ((x&(x-1))==0)&&(x!=0);
    }
    

    # 或运算

    # 对数指定位置1

    判断一个整数是不是2的幂

    // 比如将数 X=1010 1110 的低4位设置为1,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行按位或运算(X|Y=1010 1111)即可得到。
    

    # 非运算

    # 最低位置零

    使一个数的最低位为零

    // 使a的最低位为0,可以表示为:a & ~1。~1的值为 1111 1111 1111 1110,再按"与"运算,最低位一定为0。因为" ~"运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高
    

    # 异或运算

    异或的几条性质

    1. 交换律
    2. 结合律 (a^b)^c == a^(b^c)
    3. 对于任何数x,都有 x^x=0,x^0=x
    4. 自反性: a^b^b=a^0=a
    # 翻转指定位

    翻转指定位

    // 比如将数 X=1010 1110 的低4位进行翻转,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行异或运算(X^Y=1010 0001)即可得到
    
    # 两数相等

    判断两个整数相等

    a ^ 1 = 0
    
    # 交换两个数

    用位运算符交换两个整数

    void swap(int x , int y)
    {
        x ^= y;
        y ^= x;
        x ^= y;
    }
    
    # 绝对值

    计算绝对值

    int abs( int x )
    {
      int y ;
      y = x >> 31 ;
      return (x^y)-y ;        // or: (x+y)^y
    }
    

    # 移位运算

    # 乘、除、取模运算

    乘、除、取模运算转化成位运算 (在不产生溢出的情况下)

    // 乘法运算转化成位运算
    a * (2^n)      等价于     a << n
    
    // 除法运算转化成位运算
    a / (2^n)      等价于     a >> n
    
    // 取模运算转化成位运算
    a % (2^n)      等价于     a & (2^n - 1)
    

    原文地址 (opens new window)

    # 4、日期格式化中的yyyy和YYYY(JAVA)

    1. y 是Year, Y 表示的是Week year,Week year 意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。
    2. 大写的DD代表的是处于这一年中那一天,不是处于这个月的那一天

    # 常见的时间格式化字符串

    1. yyyy-MM-dd HH24:mi:ss
    格式 描述
    Y 年的最后一位数字,如:5
    YY 年的最后两位数字,如:15
    YYY 年的最后三位数字,如:015
    YYYY 年,如:2015
    Y,YYY 年用逗号分割
    SYYYY 年
    YEAR 年拼写,如:TWENTY FIFTEEN
    SYEAR 年拼写,如:TWENTY FIFTEEN
    I ISO年的最后一位数字,如:5
    IY ISO年的最后两位数字,如:15
    IYY ISO年的最后三位数字,如:015
    IYYY ISO年,如:2015
    RR 两位数字年,如:15
    RRRR 四位数字年,如:2015
    MM Month (01-12)
    MON 月份简称,如:JUN
    MONTH 月份全称,如:JUNE
    RM 罗马数字月份
    D Day of week (1-7)
    DD Day of month (1-31)
    DDD Day of year (1-366)
    HH Hour of day (1-12)
    HH12 Hour of day (1-12)
    HH24 Hour of day (0-23)
    MI Minute (0-59)
    SS Second (0-59)
    SSSSS Seconds past midnight
    FF[1…9] 毫秒
    DS 日期简称,如:6/12/2015
    DL 日期全称,如:Friday, June 12, 2015
    TS 时间简称,如:5:18:03 PM
    CC 世纪,如:21
    SCC 世纪,如:21
    Q Quarter of year (1, 2, 3, 4)
    W Week of month (1-5)
    WW Week of year (1-53)
    IW ISO Week of year (1-52 or 1-53)
    DY 星期简称,如:Fri
    DAY 星期全称,如:Friday
    AM A.M.
    PM P.M.
    AD A.D.
    BC B.C.
    TZD 夏令时
    TZR 时区
    TZH 时区之时差
    TZM 时区之分钟差
    EE era 全称
    E era 简称
    J The number of days since January 1, 4712 BC
    FM 去掉首尾空格
    FX 精确匹配
    X 秒和毫秒分隔符
    TH DDTH --> 4th
    SP DDSP -->FOUR
    SPTH DDSPTH --> FOURTH
    THSP DDTHSP --> FOURTH
    1. %Y-%m-%d %H:%i:%s
    格式 描述
    %a 缩写星期名
    %b 缩写月名
    %c 月,数值
    %D 带有英文前缀的月中的天
    %d 月的天,数值(00-31)
    %e 月的天,数值(0-31)
    %f 微秒
    %H 小时 (00-23)
    %h 小时 (01-12)
    %I 小时 (01-12)
    %i 分钟,数值(00-59)
    %j 年的天 (001-366)
    %k 小时 (0-23)
    %l 小时 (1-12)
    %M 月名
    %m 月,数值(00-12)
    %p AM 或 PM
    %r 时间,12-小时(hh:mm:ss AM 或 PM)
    %S 秒(00-59)
    %s 秒(00-59)
    %T 时间, 24-小时 (hh:mm:ss)
    %U 周 (00-53) 星期日是一周的第一天
    %u 周 (00-53) 星期一是一周的第一天
    %V 周 (01-53) 星期日是一周的第一天,与 %X 使用
    %v 周 (01-53) 星期一是一周的第一天,与 %x 使用
    %W 星期名
    %w 周的天 (0=星期日, 6=星期六)
    %X 年,其中的星期日是周的第一天,4 位,与 %V 使用
    %x 年,其中的星期一是周的第一天,4 位,与 %v 使用
    %Y 年,4 位
    %y 年,2 位

    转字符串

    SELECT to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS') FROM dual;          -- 10-AUG-2022 17:11:53
    SELECT to_char(sysdate, 'MON-YY-DD HH:MI:SS AM') FROM dual;           -- AUG-22-10 05:02:49 PM
    SELECT to_char(current_timestamp, 'HH24:MI:SS') FROM dual;            -- 17:06:10
    SELECT to_char(current_timestamp,'HH12:MI:SS') FROM dual ;            -- 05:03:01
    SELECT to_char(current_timestamp,'FMHH12:FMMI:FMSS') FROM dual;       -- 5:03:11
    

    转时间戳

    SELECT to_timestamp('-1','SYYYY') FROM dual;
    SELECT to_timestamp('98','RR') FROM dual;
    SELECT to_timestamp('01','RR') FROM dual;
    SELECT to_timestamp('12-Sep-10 14:10:10.123000','DD-Mon-YY HH24:MI:SS.FF') FROM dual;   -- 12-SEP-10 02.10.10.123000000 PM
    

    # 5、windows上使用Linux命令

    # 虚拟机

    类似于VMWare等软件

    # VMware问题
    1. 解决 VMware 中 CentOS 7 没有ens33网卡的问题
      • 首先设置在系统启动时激活网卡 vim /etc/sysconfig/network-scripts/ifcfg-ens33 将ONBOOT=no改为ONBOOT=yes
      • 执行ifconfig ens33 up,此时ifconfig 显示有了ens33网卡,但没有ip
      • 执行 systemctl stop NetworkManager ifup ens33
      • 重启网络 systemctl restart network.service

    原文链接 (opens new window)

    # git命令行

    # WSL

    适用于Linux的windows子系统(WSL:Windows Subsystem for Linux)

    1. 移动WSL默认位置
    # 下载LxRunOffline,下载文件LxRunOffline-vxxxx.zip
    https://github.com/DDoSolitary/LxRunOffline/releases
    
    # 查看子系统(linux)版本号(cmd执行, 注意要么配置环境变量, 要么在LxRunOffline.exe所在目录打开cmd)
    LxRunOffline list
    
    # 将Linux移动到指定的目录
    LxRunOffline move -n {version} -d {dir}
    LxRunOffline move -n Ubuntu-18.04 -d D:\VMware\LxRunOffline-v3.5.0-msvc\Linux
    
    1. 固定ip

    参考链接 (opens new window)

    1. 使用

    使用命令行工具连接WSL

    # 生成秘钥
    sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
    sudo ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
    sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
    
    # 修改/etc/ssh/sshd_config的PasswordAuthentication项为yes
    
    # 重启ssh
    sudo service ssh restart
    
    # 使用命令行工具连接
    

    # Docker是不是也可以

    # 6、安装jar包(手动下载)

    阿里云maven包下载 (opens new window)

    mvn install:install-file -Dfile=jar包的位置 -DgroupId=上面的groupId -DartifactId=上面的artifactId -Dversion=上面的version -Dpackaging=jar
    
    mvn install:install-file -Dfile=./pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar -DgroupId=org.pentaho -DartifactId=pentaho-aggdesigner-algorithm -Dversion=5.1.5-jhyde -Dpackaging=jar
    mvn install:install-file -Dfile=./eigenbase-properties-1.1.4.jar -DgroupId=eigenbase -DartifactId=eigenbase-properties -Dversion=1.1.4 -Dpackaging=jar
    
    
    # 还是不行, 每次maven还会去中央仓库找jar包
    # 解决方法 删除本地仓库中该jar包下:  _remote.repositories 和 以.lastUpdated结尾的文件(还有_maven.repositories ?)
    # 搞错目录了, 本地有两个maven仓库, 安装到另一个下面去了, 终于解决了!!!
    

    引入项目目录下的jar包

    <dependency>
        <groupId >com.dameng.common</groupId>
        <artifactId>common-aop</artifactId>
        <version>${dm-aop.version}</version>
        <scope>system</scope>
        <systemPath>${basedir}\lib\com.dameng.common.aop_${dm-aop.version}.jar</systemPath>
    </dependency>
    

    # 7、搜索引擎语法

    搜索指令 功能 示例
    @ 搜索社交媒体 @twitter
    $ 搜索特定价格 camera $400
    # 搜索 # 标签 #throwbackthursday
    - 从搜索结果中排除特定字词 "kafka3.0" -特性 site:csdn.net
    + 从搜索结果中获取特定字词 "kafka3.0" +特性 site:csdn.net
    filetype: 精确搜索文件类型 filetype:chm "java"
    "" 搜索完全匹配的结果 "kafka3.0新特性"
    .. 在某个数字范围内执行搜索 camera $50..$100
    OR(大写) 组合搜索 marathon OR race
    site: 搜索特定网站 "kafka3.0新特性" site:csdn.net
    related: 搜索相关网站 related:time.com
    info: 获取网站详情 info:giffox.com
    cache: 查看网站的 Google 缓存版本 cache:google.com
    \ 效用等同于 OR apple\google, apple OR google
    * 泛搜索,表征未知部分,只适用于英文 * is the mother of success
    《》 只查询图书、影视作品,只适用于中文 《钢铁是怎样炼成的》
    def: 查询关键词的定义 def:diversity / google def:
    inurl 查找在 URL 地址里有搜索关键词的页面 inurl:download inurl:book 雪中悍刀行
    intitle 查找在网页标题里有搜索关键词的页面 intitle:kafka3.0

    # 8、JDK源码导入idea

    • 将jdk安装目录下的src.zip导入idea项目,将jdk下的lib/tools.jar加入到Project Structure的Libraries,新建测试类测试,在 报错参考 (opens new window)
    • debug时jdk源码受保护: Settings -> Debugger -> Stepping -> Do not step into the classes
    • 调大编译堆内存: Settings -> Build,Execution,Deployment -> Compiler -> Build process heap size (Mbytes):
    • SDK中src.zip换成自己的代码路径

    # 9、文档编写(中文文案排版指北)

    <iframe src="https://github.com/sparanoid/chinese-copywriting-guidelines/blob/master/README.zh-Hans.md" width="100%" height="600" frameborder="0" scrolling="Yes" leftmargin="0" topmargin="0"></iframe>
    

    # 10、字符编码

    # 编码

    点击查看

    摩尔斯电码

    摩尔斯电码(英语:Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国发明家萨缪尔·摩尔斯及其助手艾尔菲德·维尔在1836年发明。
    摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用0和1两种状态的二进制代码,它的代码包括五种:
    1.点(·):1
    2.划(-):111
    3.字符内部的停顿(在点和划之间):0
    4.字符之间的停顿:000
    5.单词之间的停顿:0000000

    ASCII

    ASCII(发音: /ˈæski/ ASS-kee,American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本延伸美国标准信息交换码则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC 646。
    美国信息交换标准代码是这套编码系统的传统命名,互联网号码分配局现在更倾向于使用它的新名字US-ASCII。
    美国信息交换标准代码是美国电气和电子工程师协会里程碑之一。
    ASCII 由电报码发展而来。第一版标准发布于1963年,1967年经历了一次主要修订,最后一次更新则是在1986年,至今为止共定义了128个字符;其中33个字符无法显示(一些终端提供了扩展,使得这些字符可显示为诸如笑脸、扑克牌花式等8-bit符号),且这33个字符多数都已是陈废的控制字符。控制字符的用途主要是用来操控已经处理过的文字。在33个字符之外的是95个可显示的字符。用键盘敲下空白键所产生的空白字符也算1个可显示字符(显示为空白)。

    在计算机技术发展的早期,如ASCII(1963年)和EBCDIC(1964年)这样的字符集逐渐成为标准。但这些字符集的局限很快就变得明显,于是人们开发了许多方法来扩展它们。对于支持包括东亚CJK字符家族在内的写作系统的要求能支持更大量的字符,并且需要一种系统而不是临时的方法实现这些字符的编码。

    EBCDIC

    EBCDIC(英语:Extended Binary Coded Decimal Interchange Code,扩增二进式十进交换码),为IBM于1963年-1964年间推出的字符编码表,根据早期打孔机式的二进化十进数(BCD,Binary Coded Decimal)排列而成。是IBM迷尔级以上电脑的标准码。
    它的缺点是:英文字母不是连续地排列,中间出现多次断续,为撰写程序的人带来了一些困难。

    其他

    西欧标准

    • ISO-8859-1
    • ISO-8859-5
    • ISO-8859-6
    • ISO-8859-7
    • ISO-8859-11
    • ISO-8859-15
    • ISO/IEC 646

    DOS字符集(又称IBM代码页)

    • CP437
    • CP737
    • CP850
    • CP852
    • CP855
    • CP857
    • CP858
    • CP860
    • CP861
    • CP863
    • CP865
    • CP866
    • CP869

    Windows字符集

    • Windows-1250
    • Windows-1251:用于西里尔字母表
    • Windows-1252
    • Windows-1253
    • Windows-1254
    • Windows-1255:用于希伯莱语
    • Windows-1256:用于阿拉伯语
    • Windows-1257
    • Windows-1258:用于越南语

    台湾

    • 大五码
    • 中文信息交换码(CCCII)
    • 中文标准交换码(CNS 11643)
    • EUC

    日本

    • ISO/IEC 2022
    • Shift JIS
    • EUC

    中国大陆及港澳

    • GB 2312
    • EUC
    • GBK(规定文件为GB13000)
    • GB 18030
    • 香港增补字符集

    朝鲜半岛

    • EUC
    • KOI8-R
    • KOI8-U
    • KOI7
    • MIK

    越南

    • 越南信息交换标准代码

    印度

    • 印度文字信息交换码

    Unicode

    • Unicode
    • UTF-7
    • UTF-8
    • UTF-16
    • UTF-32

    # 字符转换工具

    由于有很多种字符编码方法被使用,从一种字符编码转换到另一种,需要一些工具。

    点击查看

    跨平台:

    • 网页浏览器–大多数现代的网页浏览器都具有此功能。一般是在菜单"查看"(View)/"字符编码"(Character Encoding)
    • iconv –程序与编程API,用于字符编码转换
    • convert_encoding.py –基于Python的转换工具.
    • decodeh.py –用于启发性猜测编码方案的算法与模块.
    • International Components for Unicode –一套C语言与Java语言的开源库,由IBM提供,用于Unicode等多语言编码的转换、实现.
    • chardet – Mozilla的编码自动检测代码的Python语言实现.
    • 新版本的Unix命令File做字符编码的检测.(cygwin与mac都有此命令)

    Linux:

    • recode –
    • utrac – 将整个文件内容从一种字符编码转换到另外一种
    • cstocs –
    • convmv –转换文件名.
    • enca –分析编码模式.

    Microsoft Windows:

    • Encoding.Convert – .NET API
    • MultiByteToWideChar/WideCharToMultiByte – Windows API
    • cscvt –转换工具
    • enca –分析编码方法

    # 现代编码模型

    点击查看

    由统一码和通用字符集所构成的现代字符编码模型则没有跟从简单字符集的观点。它们将字符编码的概念分为:有哪些字符、它们的编号、这些编号如何编码成一系列的“码元”(有限大小的数字)以及最后这些单元如何组成八位字节流。区分这些概念的核心思想是创建一个能够用不同方法来编码的一个通用字符集。为了正确地表示这个模型需要更多比“字符集”和“字符编码”更为精确的术语表示。在Unicode Technical Report (UTR) #17中,现代编码模型分为5个层次,所用的术语列在下面:

    1. 抽象字符表(Abstract character repertoire)是一个系统支持的所有抽象字符的集合。字符表可以是封闭的,即除非创建一个新的标准(ASCII和多数ISO/IEC 8859系列都是这样的例子),否则不允许添加新的符号;字符表也可以是开放的,即允许添加新的符号(统一码和一定程度上代码页是这方面的例子)。特定字符表中的字符反映了如何将书写系统分解成线性信息单元的决定。例如拉丁、希腊和斯拉夫字母表分为字母、数字、变音符号、标点和如空格这样的一些少数特殊字符,它们都能按照一种简单的线性序列排列(尽管对它们的处理需要另外的规则,如带有变音符号的字母这样的特测序列如何解释——但这不属于字符表的范畴)。为了方便起见,这样的字符表可以包括预先编号的字母和变音符号的组合。其它的书写系统,如阿拉伯语和希伯莱语,由于要适应双向文字和在不同情形下按照不同方式交叉在一起的字形,就使用更为复杂的符号表表示。
    2. 编码字符集(CCS:Coded Character Set)是将字符集{\displaystyle C}C中每个字符映射到1个坐标(整数值对:x, y)或者表示为1个非负整数{\displaystyle N}N。字符集及码位映射称为编码字符集。例如,在一个给定的字符表中,表示大写拉丁字母“A”的字符被赋予整数65、字符“B”是66,如此继续下去。多个编码字符集可以表示同样的字符表,例如ISO-8859-1和IBM的代码页037和代码页500含盖同样的字符表但是将字符映射为不同的整数。由此产生了编码空间(encoding space)的概念:简单说就是包含所有字符的表的维度。可以用一对整数来描述,例如:GB 2312的汉字编码空间是94 x 94。可以用一个整数来描述,例如:ISO-8859-1的编码空间是256。也可以用字符的存储单元尺寸来描述,例如:ISO-8859-1是一个8比特的编码空间。编码空间还可以用其子集来表述,如行、列、面(plane)等。编码空间中的一个位置(position)称为码位(code point)。一个字符所占用的码位称为码位值(code point value)。1个编码字符集就是把抽象字符映射为码位值。
    3. 字符编码表(CEF:Character Encoding Form),也称为"storage format",是将编码字符集的非负整数值(即抽象的码位)转换成有限比特长度的整型值(称为码元code units)的序列。这对于定长编码来说是个到自身的映射(null mapping),但对于变长编码来说,该映射比较复杂,把一些码位映射到一个码元,把另外一些码位映射到由多个码元组成的序列。例如,使用16比特长的存储单元保存数字信息,系统每个单元只能够直接表示从0到65,535的数值,但是如果使用多个16位单元就能够表示更大的整数。这就是CEF的作用,它可以把Unicode从0到140万的码空间范围的每个码位映射到单个或多个在0到65,5356范围内的码值。最简单的字符编码表就是单纯地选择足够大的单位,以保证编码字符集中的所有数值能够直接编码(一个码位对应一个码值)。这对于能够用使用八比特组来表示的编码字符集(如多数传统的非CJK的字符集编码)是合理的,对于能够使用十六比特来表示的编码字符集(如早期版本的Unicode)来说也足够合理。但是,随着编码字符集的大小增加(例如,现在的Unicode的字符集至少需要21位才能全部表示),这种直接表示法变得越来越没有效率,并且很难让现有计算机系统适应更大的码值。因此,许多使用新近版本Unicode的系统,或者将Unicode码位对应为可变长度的8位字节序列的UTF-8,或者将码位对应为可变长度的16位序列的UTF-16。
    4. 字符编码方案(CES:Character Encoding Scheme),也称作"serialization format"。将定长的整型值(即码元)映射到8位字节序列,以便编码后的数据的文件存储或网络传输。在使用Unicode的场合,使用一个简单的字符来指定字节顺序是大端序或者小端序(但对于UTF-8来说并不需要专门指明字节序)。然而,有些复杂的字符编码机制(如ISO/IEC 2022)使用控制字符转义序列在几种编码字符集或者用于减小每个单元所用字节数的压缩机制(如SCSU、BOCU和Punycode)之间切换。
    5. 传输编码语法(transfer encoding syntax),用于处理上一层次的字符编码方案提供的字节序列。一般其功能包括两种:一是把字节序列的值映射到一套更受限制的值域内,以满足传输环境的限制,例如Email传输时Base64或者quoted-printable,都是把8位的字节编码为7位长的数据;另一是压缩字节序列的值,如LZW或者行程长度编码等无损压缩技术。

    高层机制(higher level protocol)提供了额外信息,用于选择Unicode字符的特定变种,如XML属性xml:lang

    字符映射(character map)在Unicode中保持了其传统意义:从字符序列到编码后的字节序列的映射,包括了上述的CCS, CEF, CES层次。

    维基百科 (opens new window)

    JDK9为何要将String的底层实现由char[]改成了byte[]? (opens new window)

    编辑 (opens new window)
    上次更新: 2025/04/18, 12:12:36
    常用工具或网站
    快捷键

    ← 常用工具或网站 快捷键→

    Theme by Vdoing | Copyright © 2022-2025 Ai | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×