./configure —prefix=/usr/local/ivsql/gb18030 —enable-depend —enable-cassert —enable-debug CFLAGS=“-g -O0”

export PGHOME=/usr/local/ivsql/gb18030
export PGDATA=$PGHOME/data
export PGHOST='/tmp'
export LD_LIBRARY_PATH=$PGHOME/lib

export PATH=$PGHOME/bin:$PATH

alias p0="pg_ctl stop"
alias p1="pg_ctl -l $PGDATA/log start"
alias pl="psql -l"
alias showpg="tail -20 $PGDATA/log"

是什么?

GB18030 全称《信息技术中文编码字符集》,标准首次发布于2000年,2005年第一次修订,2022年第二次修订,比上一版增加录入了1.7万余个生僻汉字,共收录汉字87887个。在字汇和编码上兼容GBK和GB/T 2312。

pg代码

  1. pg_encnamepg_encname_tbl 实现编码名称和编码ID的映射 映射通过extern char *pg_encoding_to_char(int encoding);和`extern int pg_char_to_encoding(const char *name) encnames.c/pg_encname_tbl实现别名的对应,pg_enc2name_tbl实现官方名称的对应
  2. pg_enconv_tbl 是一个二维函数指针数组,存储了所有支持的编码转换函数,通过源编码 ID 和目标编码 ID 作为索引,可以快速找到对应的转换函数
  3. ISO10646-GB18030.TXT: 数据源文件,定义了 GB18030编码 与 Unicode (ISO/IEC 10646) 码点 之间的一一对应关系 UCS_to_GB18030.pl:Perl脚本,读取txt文件,编译时生成map文件 mb/Unicode/Makefile 添加新的map文件
  4. pg_CS CS_Table[] 判断字符边界的基本功能 ?

pg更新

  1. GB18030中高位码点(> U+FFFF)和低位码点( < U+FFFF)中线性相关的部分,GB18030和Unicode之间的转换是有规律的,使用算法转换。(这是一次优化,全查表会很慢) 无规律部分使用查表法,原始数据文件为gb18030-2000.xml,来自ICU项目 https://github.com/unicode-org/icu-data/blob/main/charset/data/xml/gb-18030-2000.xml

    https://github.com/unicode-org/icu/blob/main/icu4c/source/data/mappings/gb18030-2022.ucm

参考

人民网-中文编码字符集新国标发布 新增1.7万余个生僻汉字