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]));
但是在截取剩余部分的时候出现了乱码

请大家帮忙
展开
 我来答
windblast
推荐于2017-10-25 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13623
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部

对于字符来说,如果使用 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;
stbrine
2011-02-19
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
发给折行函数给你参考;
更简单的就是把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;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mit1208
2011-02-18 · TA获得超过2347个赞
知道大有可为答主
回答量:2743
采纳率:0%
帮助的人:1861万
展开全部
能给出一个数组内的值嘛?
这样凭空弄的话,怕不符合你的要求

比如:
arr[1]:='delphi 如何不出乱码的截取字符串'
copy(arr[1],1,6)
得到的结果是: delphi
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
iibrb85
2011-02-19 · TA获得超过133个赞
知道答主
回答量:194
采纳率:0%
帮助的人:0
展开全部
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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kcxnvbdbd
2011-02-18 · TA获得超过523个赞
知道小有建树答主
回答量:885
采纳率:50%
帮助的人:617万
展开全部
var
wstr: widestring;
begin
wstr := arr[1];
wstr := copy(wstr, 1, 30);
showmessage(wstr);
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式