delphi 如何不出乱码的截取字符串?
数组Arr:array[1..500]ofstring;copy(Arr[1],1,30);我是数组是汉字和英文的混合截取字符串输出的时候会乱码该如何解决?Arr[1]:...
数组 Arr:array[1..500]of string;
copy(Arr[1],1,30);
我是数组是汉字和英文的混合
截取字符串输出的时候会乱码 该如何解决?
Arr[1]:='我是数组是汉字和英文的混合旧数据delphi'
或者
Arr[1]:='补充提问细节MNK请及时采纳的方法后感谢MNK回答者问题'
或者
Arr[1]:='准备5台数码相机系统用电脑安装数码系统软件'
该如何截取字符串? 首先截取前15个汉字,然后再挨着截取剩余的部分 改如何实现?
我这样写的 copy(Arr[1],1,30); 然后 copy(Arr(1),31,length(Arr[3]));
但是在截取剩余部分的时候出现了乱码
请大家帮忙 展开
copy(Arr[1],1,30);
我是数组是汉字和英文的混合
截取字符串输出的时候会乱码 该如何解决?
Arr[1]:='我是数组是汉字和英文的混合旧数据delphi'
或者
Arr[1]:='补充提问细节MNK请及时采纳的方法后感谢MNK回答者问题'
或者
Arr[1]:='准备5台数码相机系统用电脑安装数码系统软件'
该如何截取字符串? 首先截取前15个汉字,然后再挨着截取剩余的部分 改如何实现?
我这样写的 copy(Arr[1],1,30); 然后 copy(Arr(1),31,length(Arr[3]));
但是在截取剩余部分的时候出现了乱码
请大家帮忙 展开
6个回答
推荐于2017-10-25 · 知道合伙人软件行家
关注
展开全部
对于字符来说,如果使用 AnsiString,则 汉字 占用2个字节,英文字符占用1个字节,这样当截取字符是汉字一部分时,就会出现乱码。
可以参考以下解决办法:
1、将 AnsitString 改为 WideString。delphi 早期版本中,string 默认是 AnsiString,新版本支持 Unicode,默认 string 代表 WideString。由于 WideString 将中文、英文字符都统一用 2 个字节表示,可以避免汉字截断的情况。
2、出现乱码,通常是截取时,汉字占用字节数没有复制完全。这种情况,可以用 ByteType 函数检测复制的字符串(最后一个字节)是否是汉字。
ByteType 函数对取出来的字符进行判断,是一个单字符还是汉字的一部分。如果返回结果是mbLeadByte 就是汉字的第一个字节,mbTrailByte 是汉字的第二个字节,mbSingleByte 是英文字符。
提供参考代码如下:
function GetText(strtxt:string;iLen:integer):string;
begin
//先判断要截取的字符串最后一个字节的类型
//如果为汉字的第一个字节则减(加)一位
if ByteType(strtxt,iLen) = mbLeadByte then
iLen := iLen - 1;
result := copy(strtxt,1,iLen);
end;
展开全部
发给折行函数给你参考;
更简单的就是把string 转为 wideString类型,但有个缺点就是,汉字和字母都算1
function Addchr13(s : string; len : Integer) : string;
var
i,j,slen:integer;
mys:string;
begin
//stbrine#yahoo.com.cn 20110219重写,修改汉字分行乱码的错误
i:=1;
j:=0;
slen:=Length(s);
mys:='';
result := '';
while i<=slen do
begin
if Ord(s[i])>160 then //判断是否汉字,如果是就取2个字符
begin
if j+2 > len then
begin
mys:=mys+chr(13);
j:=2
end
else j:=j+2;
mys:=mys+s[i]+s[i+1];
i:=i+2;
end
else
begin
if j+1 > len then
begin
mys:=mys+chr(13);
j:=1
end
else j:=j+1;
mys:=mys+s[i];
i:=i+1
end;
end;
result:=mys
end;
更简单的就是把string 转为 wideString类型,但有个缺点就是,汉字和字母都算1
function Addchr13(s : string; len : Integer) : string;
var
i,j,slen:integer;
mys:string;
begin
//stbrine#yahoo.com.cn 20110219重写,修改汉字分行乱码的错误
i:=1;
j:=0;
slen:=Length(s);
mys:='';
result := '';
while i<=slen do
begin
if Ord(s[i])>160 then //判断是否汉字,如果是就取2个字符
begin
if j+2 > len then
begin
mys:=mys+chr(13);
j:=2
end
else j:=j+2;
mys:=mys+s[i]+s[i+1];
i:=i+2;
end
else
begin
if j+1 > len then
begin
mys:=mys+chr(13);
j:=1
end
else j:=j+1;
mys:=mys+s[i];
i:=i+1
end;
end;
result:=mys
end;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
能给出一个数组内的值嘛?
这样凭空弄的话,怕不符合你的要求
比如:
arr[1]:='delphi 如何不出乱码的截取字符串'
copy(arr[1],1,6)
得到的结果是: delphi
这样凭空弄的话,怕不符合你的要求
比如:
arr[1]:='delphi 如何不出乱码的截取字符串'
copy(arr[1],1,6)
得到的结果是: delphi
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
procedure TForm1.Button1Click(Sender: TObject);
var
wStr: string;
wPos1, wPos2: Integer;
begin
wStr := '您好!<img src="S1002.jpg"/>天天开心!';
wPos1 := pos('<img', wStr);
wPos2 := pos('/>', wStr);
wPos2 := wPos2 + Length('/>');
caption := copy(wStr, wPos1, wPos2 - wPos1);
end;
var
wStr: string;
wPos1, wPos2: Integer;
begin
wStr := '您好!<img src="S1002.jpg"/>天天开心!';
wPos1 := pos('<img', wStr);
wPos2 := pos('/>', wStr);
wPos2 := wPos2 + Length('/>');
caption := copy(wStr, wPos1, wPos2 - wPos1);
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
var
wstr: widestring;
begin
wstr := arr[1];
wstr := copy(wstr, 1, 30);
showmessage(wstr);
end;
wstr: widestring;
begin
wstr := arr[1];
wstr := copy(wstr, 1, 30);
showmessage(wstr);
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询