Lazarus 1.8 Unicode 字符与UTF8字符的转换

Lazarus 1.8 Unicode 字符与UTF8字符的转换


我有一个文本文件,在WINDOWS 7 X64简体中文版中存储格式是UCS2,我想用LAZARUS 1.8 写一工具进行格式化,发现用MEMO1导入后显示乱码,经查,是LAZARUS 1.8 默认用UTF8处理字符,包括MEMO控件,所以需要转码,但测试了LAZutf8单元的工具都没有可用的,于是写下如下转码函数:

// UCS2格式文本转换为UTF8
// UCS2格式以两个字节UNICODE编码字符,所以只有保存码值为0XFFFF 之前的字符
// UCS2格式保存时,是低字先存,高字后存,如严字UNICODE编码为4E25,保存时先存25,再存4E
// C1,C2为UCS2文件中连续的两个字节

function UCS2ToUTF8(C1,C2:byte):UTF8string;
 var
   SH,SM,SL:Byte;
   VL,VH:Byte;
   V:Word;
 begin
   result:='';

   VL:=C1;  //25
   VH:=C2;  //4E
   V:=VH;
   V:=(V SHL 8)+VL;

   if (V>=$0000) AND (V<=$007F) then
      begin
         result:=Chr(VL);
      end
   else if (v>=$0080) and (v<=$07ff) then
      begin
         SM:=VL SHR 6;
         VL:=%10000000 +(%00111111 AND VL);
         VH:=%11000000 +(VH SHL 2)+SM;
         Result:=chr(VH)+CHR(VL);
      end
   else if (v>=$0800) and (v<=$FFFF) then
      begin
                 SL:=%10000000+(%00111111 AND VL);
                 SM:=%10000000+(VL SHR 6);
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值