CVCode使用码表对照的方式实现简繁转换,在Unicode盛行的今天仍然是有其现实意义的。
  较常见的应用是,企业内有台籍员工,也有大陆员工,而且简体和繁体的OS都有使用,这样在MIS系统中如何保证GB2312、GBK、BIG5都能够正常
  CVCode使用码表对照的方式实现简繁转换,在Unicode盛行的今天仍然是有其现实意义的。
  较常见的应用是,企业内有台籍员工,也有大陆员工,而且简体和繁体的OS都有使用,这样在MIS系统中如何保证GB2312、GBK、BIG5都能够正常使用,而且BIG5输入的资料在GBK的系统上要显示正常,并且能与GB2312中输入的字符相匹配(查询中,按名称查询是最常见的)。
  针对这样的应用,CVCode就提供码表对照的方式,理论上讲,只要定义好码表,就可以真正的让BIG5与GB2312“互通”

但是在CVCode中,只是GB2312与BIG5转换,在GBK输入法流行的今天,GB2312显然不够了。而且BIG5字符集要远远大于GB2312,所以扩展CVCode使其具有GBK与BIG5转换功能势在必行。

GBK的字符范围如下:

GBK字符集范围
分区                      高位     低位<
----------------------------------------------
●GBK/1:GB2312非汉字符号: A1~A9 || A1~FE
●GBK/2:GB2312汉字      : B0~F7 || A1~FE
●GBK/3:扩充汉字        : 81~A0 || 40~FE
●GBK/4:扩充汉字        : AA~FE || 40~A0
●GBK/5:扩充非汉字      : A8~A9 || 40~A0
其中1和2就是对应的GB2312字符集。

如何让CVcode支持GBK,有3个问题:

1.判断是否GB码
    2.计算字符顺序
    3.与原有码表兼容

第一个问题就要修改IsGB如下:

function isGB(value: string): Boolean;
Var
  mHigh, mLow : integer;
begin
  if (length(value)>=2) then
  begin
    mHigh := ord(value[1]);
    mLow := ord(value[2]);
    Result := False;
    //●GBK/1:GB2312非汉字符号: A1~A9 || A1~FE
    if (mHigh in [$A1..$A9]) and (mLow in [$A1..$FE]) then Result := True;
    //●GBK/2:GB2312汉字      : B0~F7 || A1~FE
    if (mHigh in [$B0..$F7]) and (mLow in [$A1..$FE]) then Result := True;
    //●GBK/3:扩充汉字        : 81~A0 || 40~FE
    if (mHigh in [$81..$A0]) and (mLow in [$40..$FE]) then Result := True;
    //●GBK/4:扩充汉字        : AA~FE || 40~A0
    if (mHigh in [$AA..$FE]) and (mLow in [$40..$A0]) then Result := True;
    //●GBK/5:扩充非汉字      : A8~A9 || 40~A0
    if (mHigh in [$A8..$A9]) and (mLow in [$40..$A0]) then Result := True;
  end
  else
    Result := true;
{  //这是原来的,只以GB2312为判断依据
  if (length(value)>=2) then
  begin
    if (value[1] <= #161) and (value[1] >= #247) then
      Result := false
    else
      if (value[2] <= #161) and (value[2] >= #254) then
        Result := false
      else
        Result := true
  end
  else
    Result := true;
    }
end;

第二个要计算顺序和与原有码表兼容---其实兼容主要也在顺序:

function GBOffset(value: string): integer;
Var
  mHigh, mLow : integer;
  mGBK1, mGBK2, mGBK3, mGBK4, mGBK5: integer;
begin
{ //这是原来的---
  if length(value) >= 2 then
    Result := (Ord(value[1]) - $A1) * $5E + (Ord(value[2]) - $A1)
  else
    Result := -1;
}
  Result := -1;
  if length(value) >= 2 then
  begin
    mHigh := ord(value[1]);
    mLow := ord(value[2]);
    //每个区都有多少个汉字?
    //mGBK1 := ($A9 - $A1 + 1) * ($FE - $A1 + 1);  // = 846 = $34E
    //mGBK2 := ($F7 - $B0 + 1) * ($FE - $A1 + 1);  // = 6768 = $1A70
    //mGBK3 := ($A0 - $81 + 1) * ($FE - $40 + 1);
    //mGBK4 := ($FE - $AA + 1) * ($A0 - $40 + 1);
    //mGBK5 := ($A9 - $A8 + 1) * ($A0 - $40 + 1);
    mGBK1 := $34E;  //846
    mGBK1 := mGBK1 + ($B0 - $A9-1) * ($FE - $A1 + 1);   //这个是为了和以前的码表兼容
    mGBK2 := $1A70;  //6768
    mGBK3 := $17E0;  //6112
    mGBK4 := $2035;  //8245
    mGBK5 := $C2;  //194
    //●GBK/1:GB2312非汉字符号: A1~A9 || A1~FE
    if (mHigh in [$A1..$A9]) and (mLow in [$A1..$FE]) then
      Result := (mHigh - $A1) * ($FE - $A1 + 1) + (mLow - $A1)
    //●GBK/2:GB2312汉字      : B0~F7 || A1~FE
    else if (mHigh in [$B0..$F7]) and (mLow in [$A1..$FE]) then
      Result := mGBK1 +
                (mHigh - $B0) * ($FE - $A1 + 1) + (mLow - $A1)
    //●GBK/3:扩充汉字        : 81~A0 || 40~FE
    else if (mHigh in [$81..$A0]) and (mLow in [$40..$FE]) then
      Result := mGBK1 + mGBK2 +
                (mHigh - $81) * ($FE - $40 + 1) + (mLow - $40)
    //●GBK/4:扩充汉字        : AA~FE || 40~A0
    else if (mHigh in [$AA..$FE]) and (mLow in [$40..$A0]) then
      Result := mGBK1 + mGBK2 + mGBK3 +
                (mHigh - $AA) * ($A0 - $40 + 1) + (mLow - $40)
    //●GBK/5:扩充非汉字      : A8~A9 || 40~A0
    else if (mHigh in [$A8..$A9]) and (mLow in [$40..$A0]) then
      Result := mGBK1 + mGBK2 + mGBK3 + mGBK4 +
                (mHigh - $A8) * ($A0 - $40 + 1) + (mLow - $40);
  end
end;

CVCode简繁转换的扩展:GBK与Big5转换相关推荐

  1. mysql编码转换工具_MySQL GBK→UTF-8编码转换

    MySQL GBK→UTF-8编码转换 2021-01-23 11:20:21483 前言: 第一次写教程,其实算不得教程,只是想总结个转换的手记.如果中间有错误,或者办法不够理想,大家回贴研究下. ...

  2. VC----实现汉字简繁转换

    转载请注明出处:http://blog.csdn.net/yf210yf/article/details/7850472 繁体为什么分为乱码和非乱码的.现在总算搞清楚了 看起来是乱码那种叫Big5,非 ...

  3. php - 简繁转换

    FROM: http://justcoding.iteye.com/blog/593782 均只支持 UTF8 文本,所以如果获得的来源是 $_GET 的话, 就有必要转换一下编码了.用到的函数是: ...

  4. 网站实时简繁转换解决方案

    最近由于工作需要做了一个将网站转成繁体呈现给用户的功能,后来参看了许多成功案例,发现思路大体都是相同的,我现在将我具体的实现拿出来讨论一下,因为它不可能是一个百分百覆盖的功能,所以希望大家能多提意见. ...

  5. NLP之TEA:基于SnowNLP实现自然语言处理之对输入文本进行情感分析(分词→词性标注→拼音简繁转换→情感分析→测试)

    NLP之TEA:基于SnowNLP实现自然语言处理之对输入文本进行情感分析(分词→词性标注→拼音&简繁转换→情感分析→测试) 目录 NLP分词 NLP词性标注 NLP情感分析-TEA NLP常 ...

  6. HanLP极致简繁转换详细讲解

    HanLP极致简繁转换详细讲解 谈起简繁转换,许多人以为是小意思,按字转换就行了.事实上,汉语历史悠久,地域复杂,发展至今在字符级别存在"一简对多繁"和"一繁对多简&qu ...

  7. gbk编码在线转换工具_TOOLFK工具-在线汉字/字母/人民币/简繁体转换工具

    本文要推荐的[TOOLFK]在线汉字/字母/人民币/简繁体转换工具,提供简繁体在线转换.人民币大写转换.字母大小写互转.汉字转拼音在线日常使用工具. 網站名稱:ToolFk 網站鏈結:https:// ...

  8. SQL Server:简繁转换

    代码 --全部的简繁对照 declare @jall nvarchar(4000),@fall nvarchar(4000) select @jall=N'啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸 ...

  9. java utf8 简繁转换 类库_在Java中进行中文繁体简体转换,基于OpenCC(Open Chinese Convert)方案...

    一.OpenCC介绍 OpenCC (Open Chinese Convert,开放中文转换) 是一个用于中文简繁转换的开源项目,支持词汇级别的转换.异体字转换和地区习惯用词转换(中国大陆.台湾.香港 ...

最新文章

  1. 2019年Java程序员就业分析
  2. cv2.setNumThreads
  3. 开放寻址法VS链表法
  4. pip3 install requests Cannot open D:\Python35\Scripts\pip3-script.py
  5. 达梦数据库导入oracle数据_达梦数据库和oracle数据的一些区别
  6. In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column...
  7. python纵向数据分析_python数据分析三个重要方法之:numpy和pandas
  8. SuSE 11 安装mysql 5.6.35步骤
  9. 关于IT结合测试,事前DB与事后DB的问题(之一:如何能更好的看出更新效果)。
  10. BURP安装Turbo Intruder插件报错问题
  11. vue 停止页面滚动_Vue关于滚动停止的监听方法
  12. ChatGPT的注册和使用教程
  13. 合肥工业大学机器人技术实验五十六题
  14. Clickhouse 踩坑之旅 ---- MergeTree不合并分区的问题
  15. esp32➡遥控篇➡turtlesim➡mobot➡turtlebot3
  16. BCB数据库问题总结
  17. 【Cornerstone Mac系统下的安装】
  18. oracle调优 oracle培训
  19. 【新浪面试题】如何技高一筹解决查找单链表中的倒数第k个结点
  20. s15.一键安装java脚本

热门文章

  1. 火星直播?一种可以给中国火星探测工程当云监工的方法
  2. 马斯克放话:6个月内公测卫星互联网!颠覆5G的将不是6G
  3. 数据科学中的6个基本算法,掌握它们要学习哪些知识
  4. 深入分析 Redis Lua 脚本运行原理
  5. 本地win7ping VM linux ipv6地址问题
  6. RocketMQ(六):namesrv再探
  7. 吾八哥学Python(四):了解Python基础语法(下)
  8. Python 面试总结
  9. 改变状态栏的背景色和文字的颜色
  10. 硬件语言编写规范与技巧