delphi 如何不出乱码的截取字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 如何不出乱码的截取字符串?相关的知识,希望对你有一定的参考价值。

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

请大家帮忙

对于字符来说,如果使用 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;
参考技术A 发给折行函数给你参考;
更简单的就是把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;本回答被提问者采纳
参考技术B 能给出一个数组内的值嘛?
这样凭空弄的话,怕不符合你的要求

比如:
arr[1]:='delphi 如何不出乱码的截取字符串'
copy(arr[1],1,6)
得到的结果是: delphi
参考技术C 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;
参考技术D var
wstr: widestring;
begin
wstr := arr[1];
wstr := copy(wstr, 1, 30);
showmessage(wstr);
end;

delphi控制台程序输出中文乱码,如何解决?

我在程序中直接用writeln()输出,如writeln('你好'),但是控制台显示的时候是乱码,怎么解决

这与Delphi无关。

按如下步骤操作,应该可以解决:

 

一、在“开始”->“运行”里输入“CMD“,回车或者点击“确定”,打开命令行窗口。应该显示:

 

 

 

Microsoft Windows [版本 6.1.7600]

版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\\Users\\Administrator>

 

这表明你的命令行窗口可以显示中文,否则,应该显示如下的信息:

Microsoft Windows [Version 6.1.7600]

Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\\Users\\Administrator>

 

这表明你的命令行窗口不能显示中文。你应该继续如下操作:

 

二、鼠标单击命令行窗口的左上角,打开系统菜单,选择“选项”,在“默认代码页”中选择“936 (ANSI/OEM - 简体中文GBK)”,点“确定”。

 

关闭命令行窗口。

重新打开命令行窗口,应该可以显示中文了。

 

三、重新运行你的Delphi控制台程序,是不是好了?

 

另外,我的是Windows7,根据你的Windows版本不同,命令行窗口显示的信息可能会略有差异。

 

 

追问

按照你说的设置了,不过程序还是老样子,中文还是乱码~~~不过还是非常感谢你,回答的很详细

追答

把你的命令行窗口抓屏过来,我看看

追问

后面的中文是直接用writeln输出的

追答

你用的不是Windows的命令行窗口cmd.exe,而是用的dbmgr.exe。
解决办法:
一、设置你的dbmgr.exe,用来显示中文(如果可以设置的话)。
二、如果不可以,你就把Delphi程序生成的exe文件,在Windows的命令行窗口cmd.exe下运行。

参考技术A 你到www.csdn.net 论坛的DELPHI栏目问,人气足,这属小问题

以上是关于delphi 如何不出乱码的截取字符串?的主要内容,如果未能解决你的问题,请参考以下文章

delphi中 怎样截取字符串

PHP实现中文截取无乱码

PHP 截取字符串后乱码的解决方案

在delphi中如何获取字符串的内存地址

php截取中文字符串乱码问题

php解决中文截取乱码问题