Delphi 中使用的字符串是 GB2312 编码的字符集的 AnsiString 字符串吗?
如何获取STRING中某个字符对应的GB2312编码?
如何获取STRING中某个字符对应的GB2312编码?
解决方案 »
- 软件外包
- 怎么将2005-4-21转化为2005年4月21日?
- 如何重载COM的构造函数,引入参数?Initialize函数是没有参数的啊
- 如何用treeview完成这个要求
- 是ADO+Access有问题,还是ADO本身有问题?这是老问题了!
- 不使用ado控件,使用原生ado.原生ado怎样使用
- 在DELPHI中怎样调用API函数?
- 如何才能在列表框函数中调用自定义函数???
- 在DELPHI中怎么定义float,没法定义啊,对于符点行的数据,在DELPHI中该如何定义啊
- 如何使DELPHI写的FORM在打开时在WINDOWS的任务栏显示?象IE一样?
- 怎么让播放器在打开时就显示上一次所打开的歌曲
- delphi怎么控制USB
而简体中文版的windows使用的也不是GB2312字符集,GB2312只包含不到7000个的简化字,连一般的繁体字都没有。按照国家标准,2000年以后的PC产品必须支持GB18030字符集。GB2312编码很简单,除ASCII字符外,剩下的都是2bytes,低位都是$A1..$FE,汉字区的高位是$B0..$F7(还有个自定义区$F8..$FE,可以不关心)
Thanks,还没有深入了解过字符的编码。但现在急需要获取String中的各个字符所对应的GB2312编码!要这样实现呢?请教
var
i, l : Integer;
p : PAnsiChar;
begin
p := Pointer(S);
i := 0;
l := Length(s);
while(i<l)do
case p[i] of
#$01..#$7f : { ASCII }
begin
Result := Format('%s%.2x ', [Result, Byte(p[i])]);
Inc(i);
end;
#$A1..#$AF { 非汉字区与非汉字保留区 },
#$B0..#$F7 { 汉字区 },
#$F8..#$FE { 汉字保留区 }:
begin { 这里就不检查低位在不在GB2312编码区了 }
Result := Format('%s%.4x ', [Result, MakeWord(Byte(p[i+1]), Byte(p[i])) ]);
Inc(i, 2);
end;
else { 这里假设其它不在GB2312编码区的文字也是2字节编码,并在后面加个'?'标识一下 }
begin
Result := Format('%s%.4x? ', [Result, MakeWord(Byte(p[i+1]), Byte(p[i])) ]);
Inc(i, 2);
end;
end;
end;
function GetAnsiEncodingAsGB2312(const S: AnsiString): AnsiString;
begin
for i:=1 to length(s) do
result:=result+‘ ’+inttohex(s[i],2);
end;
(Seamour) 一个演示,效率我就不管了