最近在做Delphi下的简体与繁体转换, 发现Windows2000自带的工具"中文转码器"很好用, 不仅可以转内码(BIG5-->GBK), 还可以将繁体字转为简体字(如:東-->东).

要转内码比较简单, 使用MultiByteToWideChar先将简体/繁体(GBK/BIG5)转为UniCode, 再使用WideCharToMultiByte从Unicode转为繁体/简体(BIG5/GBK).

EX:
function Big52GB( ABig5String: string): String;
{ BIG5 to GBK : BIG5 ==> Unicode ==> GBK }
Var
mWString: array[0..1024] of WideChar;
cchWideChar: Integer;
mLongBool: LongBool;
begin
Result := ABig5String; //分配空间
mLongBool := True;
//1.先取得需要的长度
cchWideChar := MultiByteToWideChar(950, 0, PChar(ABig5String), length(ABig5String), @mWString, 0);
// SetLength(mWString, cchWideChar+1);
//2.BIG5 to Unicode
MultiByteToWideChar(950, 0, PChar(ABig5String), length(ABig5String), @mWString, cchWideChar);
//3.Unicode to GBK
WideCharToMultiByte(936, 0, @mWString, cchWideChar, PChar(Result), length(Result), ?, @mLongBool);
end;

经过以上步骤, 就可以把BIG5码转为GBK码,但是繁体中的字因为在GBK中大部分都有对应(繁体字形),

因而,以上得到的是BIG5对应的繁体字形,如BIG5码的 “東”($AA46)得到的GBK对应的字为“東”($967C),而不是简体中最常用的“东”($B6AB)

中文转码器中,最后一页提供了是否转字形的选项,它可以做到!

那我们也应该可以做到!经过调试,原来它是调用LCMapStringW!

在Windows.pas中,定义了三个这样的函数:

function LCMapString(Locale: LCID; dwMapFlags: DWORD; lpSrcStr: PChar;
  cchSrc: Integer; lpDestStr: PChar; cchDest: Integer): Integer; stdcall;

function LCMapStringA(Locale: LCID; dwMapFlags: DWORD; lpSrcStr: PAnsiChar;
  cchSrc: Integer; lpDestStr: PAnsiChar; cchDest: Integer): Integer; stdcall;

function LCMapStringW(Locale: LCID; dwMapFlags: DWORD; lpSrcStr: PWideChar;
  cchSrc: Integer; lpDestStr: PWideChar; cchDest: Integer): Integer; stdcall;

其中,LCMapString=LCMapStringA,也就是使用ASCII的,当然我们也可以使用LCMapStringW转UniCode成为简体字形。

转自:http://www.west263.com/www/info/57623-1.htm

中文转码器的工作原理_delphi教程的更多相关文章

  1. Java类加载器的工作原理

    Java类加载器的作用就是在运行时加载类.Java类加载器基于三个机制:委托.可见性和单一性.委托机制是指将加载一个类的请求交给父类加载 器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它. ...

  2. ld链接器的工作原理及链接顺序(转)

    基礎知識 GNU ld 最基本的連結單位是 object 檔,即單一個編譯單元所對應的編譯結果,通常副檔名是 .o.在 object 檔所維護的資訊當中,連結器主要關注的是: 輸出符號: 這是定義在 ...

  3. AppScan工作原理&操作教程

    一.AppScan的工作原理 对一个综合性的大型网站来说,可能存在成千上万的页面.以登录界面为例,至少要输入用户名和密码,即该页面存在两个字段,当提交了用户名和密码等登录信息,网站需要检查是否正确,这 ...

  4. SQL Server查询优化器的工作原理

    SQL Server的查询优化器是一个基于成本的优化器.它为一个给定的查询分析出很多的候选的查询计划,并且估算每个候选计划的成本,从而选择一个成本最低的计划进行执行.实际上,因为查询优化器不可能对每一 ...

  5. DC DC降壓變換器ic 工作原理

    目前DC/DC轉化器大致可分為:升壓型dc dc變化器.降壓型dc dc變化器及可升壓又可降壓dc dc變換器.我們今天主要提一下降壓型dc dc變換器的原理: 見下圖降壓變換器原理圖如圖1所示, 當 ...

  6. 安卓MonkeyRunner源码分析之工作原理架构图及系列集合

    花了点时间整理了下MonkeyRunner的工作原理图,请配合本人博客里面MonkeyRunner其他源码分析文章进行阅读.下面整理成相应系列列表方便大家阅读: MonkeyRunner源码分析之-谁 ...

  7. Django之CBV视图源码分析(工作原理)

    1.首先我们先在urls.py定义CBV的路由匹配. FBV的路由匹配: 2.然后,在views.py创建一名为MyReg的类: 注意:该类必须继续View类,且方法名必须与请求方式相同(后面会详解) ...

  8. 浅谈C++编译原理 ------ C++编译器与链接器工作原理

    原文:https://blog.csdn.net/zyh821351004/article/details/46425823 第一篇:      首先是预编译,这一步可以粗略的认为只做了一件事情,那就 ...

  9. 微光互联 TX800-U 扫码器无法输出中文到光标的问题

    问题背景 某检测场有一批扫码器,购于微光互联,型号 TX800-U,用于在不同办理窗口间扫描纸质材料上的二维码,简化录入过程.扫码器通过 USB 接入 PC 系统 (windows),自动安装驱动,接 ...

随机推荐

  1. 安装 dubbo

    Dubbo的介绍: 是一个java版的RPC框架,由阿里巴巴开发并使用,结合zookeeper,实现流动计算架构完成资源调度和治理的工作 dubbo管控台可以对注册到zookeeper注册中心的服务或 ...

  2. 物体检测之FPN及Mask R-CNN

    对比目前科研届普遍喜欢把问题搞复杂,通过复杂的算法尽量把审稿人搞蒙从而提高论文的接受率的思想,无论是著名的残差网络还是这篇Mask R-CNN,大神的论文尽量遵循著名的奥卡姆剃刀原理:即在所有能解决问 ...

  3. 使用FPM打包工具打rpm包

    使用FPM打包工具打rpm包 一:安装ruby环境和gem命令 fpm 是 ruby写的,因此系统环境需要ruby且版本必须大于1.8.5 # yum -y install ruby rubygems ...

  4. es6(11)--Proxy,Reflect

    //Proxy,Reflect { let obj={ time:'2018-06-25', name:'net', _r:123 }; let monitor = new Proxy(obj,{ / ...

  5. Python网络爬虫之requests模块

    今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 引入 ...

  6. 零基础学习python_魔法方法(41-48课)(迭代器)

    接下来这个为啥要叫魔法方法呢,额,这个嘛我是跟小甲鱼的视频取的名字一样的,因为会讲比较多杂的东西,有... 魔法方法详细阅读地址:http://bbs.fishc.com/thread-48793-1 ...

  7. Linux下卸载安装jdk

    1.检查一下系统中的jdk版本 [root@localhost software]# java -version 显示: openjdk version "1.8.0_102" O ...

  8. html A标签 绑定点击事件。跳转页面。处理

    在平时的页面中,肯定有需要点击A标签 进行处理. 这时候习惯性的绑定一个点击事件进行数据处理. 在A标签中 herf="#" 然后绑定一个点击事件. 或者在A标签里面的元素里面有一 ...

  9. <spark> ~/spark/conf/spark-default.conf 配置文件

    因为看到我参考的Hadoop/spark集群搭建的文档中的都没有对 /spark-default.conf 的配置 合理地对 /spark-default.conf  进行配置,能够提高执行效率 -- ...

  10. beginner_json_setting