中文转码器的工作原理_delphi教程
最近在做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教程的更多相关文章
- Java类加载器的工作原理
Java类加载器的作用就是在运行时加载类.Java类加载器基于三个机制:委托.可见性和单一性.委托机制是指将加载一个类的请求交给父类加载 器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它. ...
- ld链接器的工作原理及链接顺序(转)
基礎知識 GNU ld 最基本的連結單位是 object 檔,即單一個編譯單元所對應的編譯結果,通常副檔名是 .o.在 object 檔所維護的資訊當中,連結器主要關注的是: 輸出符號: 這是定義在 ...
- AppScan工作原理&操作教程
一.AppScan的工作原理 对一个综合性的大型网站来说,可能存在成千上万的页面.以登录界面为例,至少要输入用户名和密码,即该页面存在两个字段,当提交了用户名和密码等登录信息,网站需要检查是否正确,这 ...
- SQL Server查询优化器的工作原理
SQL Server的查询优化器是一个基于成本的优化器.它为一个给定的查询分析出很多的候选的查询计划,并且估算每个候选计划的成本,从而选择一个成本最低的计划进行执行.实际上,因为查询优化器不可能对每一 ...
- DC DC降壓變換器ic 工作原理
目前DC/DC轉化器大致可分為:升壓型dc dc變化器.降壓型dc dc變化器及可升壓又可降壓dc dc變換器.我們今天主要提一下降壓型dc dc變換器的原理: 見下圖降壓變換器原理圖如圖1所示, 當 ...
- 安卓MonkeyRunner源码分析之工作原理架构图及系列集合
花了点时间整理了下MonkeyRunner的工作原理图,请配合本人博客里面MonkeyRunner其他源码分析文章进行阅读.下面整理成相应系列列表方便大家阅读: MonkeyRunner源码分析之-谁 ...
- Django之CBV视图源码分析(工作原理)
1.首先我们先在urls.py定义CBV的路由匹配. FBV的路由匹配: 2.然后,在views.py创建一名为MyReg的类: 注意:该类必须继续View类,且方法名必须与请求方式相同(后面会详解) ...
- 浅谈C++编译原理 ------ C++编译器与链接器工作原理
原文:https://blog.csdn.net/zyh821351004/article/details/46425823 第一篇: 首先是预编译,这一步可以粗略的认为只做了一件事情,那就 ...
- 微光互联 TX800-U 扫码器无法输出中文到光标的问题
问题背景 某检测场有一批扫码器,购于微光互联,型号 TX800-U,用于在不同办理窗口间扫描纸质材料上的二维码,简化录入过程.扫码器通过 USB 接入 PC 系统 (windows),自动安装驱动,接 ...
随机推荐
- 梯度下降(Gradient Descent)相关概念
梯度,直观理解: 梯度: 运算的对像是纯量,运算出来的结果会是向量在一个标量场中, 梯度的计算结果会是"在每个位置都算出一个向量,而这个向量的方向会是在任何一点上从其周围(极接近的周围,学过 ...
- Devlopment Env Setup install ubuntu16.04
http://blog.csdn.net/ljheee/article/details/52966048 1.add chinese language support settings -> i ...
- 【MySql】【Navicat】下载,安装,激活攻略
来了一家新公司,新电脑,最近申请了DB访问的权限. 公司用的MySql数据库,自己下载了MySql workbench,用的也还不错. 现在下载了一个Navicat,比较讨厌的是,现在很多软件都需要注 ...
- netfilter/iptables
参考:tcp/ip协议 1.Linux框架概念 1.1.工作流程图 1.2.功能: ①过滤(filter) ②修改源ip.目标ip(nat) ③拆解报文.修改报文标记.重新封装(mangle) ④关闭 ...
- 阿里Canal配置(编写中)
首先在源mysql的.ini文件中进行配置 [client]default-character-set=utf8 [mysqld]basedir = E:/testCanal/mysql-5.7.17 ...
- Eureka 消费方
创建服务消费者 1.pom文件添加eureka的起步依赖 2.配置文件添加eureka.client相关配置 3.启动类注解@EnableDiscoveryClient 启动类: 启动后.
- python中的insert
insert()往列表的指定位置添加元素,举个例子: 1 a = ["hello", "world", "dlrb"] 2 a.insert ...
- samba配置中常见错误收集.txt
在命令行输入命令: ~$ smbclient -L \\127.0.0.1按要求输入密码后,提示出错:session setup failed: NT_STATUS_LOGON_FAILURE 这是因 ...
- django相关
后台运行django:https://blog.csdn.net/rnger/article/details/79907884 nohup python manage.py runserver 0.0 ...
- 在Windows系统上一批可以下载但是需要经过编译再安装的第三方的直接编译后的版本(UCI页面)
在Windows系统上一批可以下载但是需要经过编译再安装的第三方的直接编译后的版本(UCI页面) (https://www.lfd.uci.edu/~gohlke/pythonlibs/) win10 ...