怎样获取字符对应的GB2312编码?急!!在线等!

mills 2009-02-21 09:59:53
Delphi 中使用的字符串是 GB2312 编码的字符集的 AnsiString 字符串吗?
如何获取STRING中某个字符对应的GB2312编码?
...全文
279 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
atrocity2010 2010-05-12
  • 打赏
  • 举报
回复


Seamour

(Seamour)

一个演示,效率我就不管了
stgsd 2009-02-22
  • 打赏
  • 举报
回复
简单点
function GetAnsiEncodingAsGB2312(const S: AnsiString): AnsiString;
begin
for i:=1 to length(s) do
result:=result+‘ ’+inttohex(s[i],2);
end;
Seamour 2009-02-21
  • 打赏
  • 举报
回复
一个演示,效率我就不管了

function GetAnsiEncodingAsGB2312(const S: AnsiString): AnsiString;
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;
mills 2009-02-21
  • 打赏
  • 举报
回复
怎样实现
mills 2009-02-21
  • 打赏
  • 举报
回复
To Seamour:
Thanks,还没有深入了解过字符的编码。但现在急需要获取String中的各个字符所对应的GB2312编码!要这样实现呢?请教。。。
Seamour 2009-02-21
  • 打赏
  • 举报
回复
delphi中的字符串不是GB2312,而是ANSI String,它只是被windows按照ACP代码页解释成用户设定locale的字符集,可以在 控制面板->区域和语言选项->高级->非unicode程序的语言 设定。
而简体中文版的windows使用的也不是GB2312字符集,GB2312只包含不到7000个的简化字,连一般的繁体字都没有。按照国家标准,2000年以后的PC产品必须支持GB18030字符集。GB2312编码很简单,除ASCII字符外,剩下的都是2bytes,低位都是$A1..$FE,汉字区的高位是$B0..$F7(还有个自定义区$F8..$FE,可以不关心)
mills 2009-02-21
  • 打赏
  • 举报
回复
哎,没人!自己顶

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧