Delphi中处理汉字的方法
来源:互联网 发布:vb叶轮 编辑:程序博客网 时间:2024/05/16 11:04
在Delphi中一个汉字占两个字节,各种字符串处理函数,直接处理字符串中汉字时经常会发生乱码或不显示。我在处理时也是弄了半天,到处找资料,一下是找到的几种处理方法。在Delphi7下测试通过。
一.中文所用的字符全是双字节字符,英文所用的字节全是单字节字符,也就是mbSingleByte。本实例是用ByteType()函数返回字符串指定位置上的字符,如果不是mbSingleByte,则表示为双字节字符。主要代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
s,s1: String;
i : Integer;
begin
s := Edit1.Text;
i := 0;
while i<Length(s) do
begin
if (ByteType(S,i) <> mbSingleByte) then
begin
s1 := s1+ Copy(s,i,2)+' ';
i := i+2;
end
else
i:= i+1;
end;
Label2.Caption := Trim(s1);
end;
二.本实例是用Length()函数来获取字符串的长度,用Ord()函数来获取每个字符的ASCII码,当ASCII码的值大于$7F时,表示该字符是汉字的前一个字节,并用Copy()函数来获取当前的汉字。主要代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var
str,s,sj: String;
i: integer;
begin
str := trim(Edit1.Text);
i := 0;
while i< Length(str) do
begin
if ord(str[i]) > $7F then
begin
s := Copy(str,i,2);
sj :=sj+ '"'+s+'"';
i := i+2;
end
else i:=i+1;
end;
Label2.Caption := '在字符串中含有汉字'+sj;
end;
三用widestring类型。widestring处理汉字时汉字按一个字符算。代码如下:
procedure TForm1.Button3Click(Sender: TObject);
var
str:string;
badword,filtstr:widestring;
filtcount,i:integer;
msg:widestring;
begin
msg:=edit1.Text;
for i:=1 to length(msg) do
begin
if Pos((msg[i]),filtstr)<>0 then
begin
badword:=badword+msg[i]+',';
msg:=StringReplace(msg,msg[i],'*', []);
filtcount:=filtcount+1;
end;
end;
showmessage(msg);
end;
四.用Windows.IsDBCSLeadByte函数处理。详细使用见IsDBCSLeadByte函数博文.
- Delphi中处理汉字的方法
- delphi中处理数据类型错误的方法
- 字符串中有汉字的处理方法集合
- delphi中获取汉字的拼音首字母
- DELPHI中简单把汉字转换成ASCII码的方法
- Delphi 中自定义异常及异常处理的一般方法
- Delphi中对“虚拟列”的处理方法
- Delphi 中多线程同步的一些处理方法
- delphi警告的处理方法
- PLSQL汉字乱码的处理方法
- Delphi判断一个字符是否为汉字的最佳方法
- delphi判断一个字符是否为汉字的最佳方法
- Ext-JS中Label的style阴影在chrome中汉字显示不正确处理方法
- URL中带汉字的编码处理
- QNetworkRequest数据中 汉字的处理
- Delphi中取得汉字的第一个拼音字母
- delphi xe6中怎么获取汉字的GB码?
- Flex中处理双字节字符(判断汉字长度)的方法
- ORACLE CLIENT与SERVER端相连的配置
- libtool的使用 linux下的so、o、lo、a、la文件有什么区别
- 关于动态语言和静态语言、强类型定义语言和弱类型定义语言的概念区分
- ocation.href 在IE6中不跳转的解决方法与推进使用代码
- 上线前用 JSMin 压缩你的 JavaScript 档案
- Delphi中处理汉字的方法
- 兰州拉面馆与半自动化测试
- 网站地址多出jdfwkey的问题解析及解决方法
- 四十不惑
- 快速清空数据库中所有表
- gridview子窗口向父窗口传值!
- 去掉QTreeWidget中节点之间的虚线
- JGroups的MethodCall匹配问题
- Oracle开发之:窗口函数 (转) rows between unbounded preceding and current row