我在用SQL入库时,由于string太长,我就取一定长度,但是不知到最后的字符是不是半个汉字字符,怎么办?(200分)

  • 主题发起人 主题发起人 小马哥
  • 开始时间 开始时间
我觉得,既然你要限制字段长度,那么在输入数据的时候就应该限制,而不是等到
保存的时候才截断--这样不是会把有用的东西截断了吗?
 
用widestring(yourstring)来代替他可以保证不会有半个汉字
 
关键问题是因为已经入好的数据在文本里让我转到库里呀!十万火急!
 
由于我是初次使用DELPHI,hubdog,请详细说一下好吗?非常感谢,解决问题了,200分送你!
 
hubdog说的对。
 
hubdog是对的.
不过我还有一点疑问:
如果database的字段宽度是5,而widestring("大富翁论坛")的长度也是5,那么
5个汉字是否会超出字段的宽度? 也就是说,是不是数据库也要支持unicode才行?
 
length('我1'):=3;
length(widestring('我1')):=2;
也就是说widestring能正确的把汉字和英文字母,当成一个字符
注意一个string的单位长度为1byte,而widestring的单位长度为2byte
为了避免出现半个汉字,如果汉字很多的话可以先widestring(memo1.lines.strings[n]),再写库。原来写256的长度,现在写128.
希望对你有用
 
现在是这样的,string里面是中英文混杂在一起的,如果我用widestring的话,它会把截掉很多的有用的信息,假如是全英文的话,我可能就只入进去128个字节,浪费掉很多的信息!
 
那么你希望是怎么处理呢? 截掉多余字符并且不损失内容???????????
实在不行你自己判断最后一个字节是不是半个中文吧!
 
半个中文的asc怎么判断
 
中文的每一位ascii都>127
否则 为E文。
var a:string;
a:='时';
begin
if (ord(a[1])>127) or (ord(a[2])>127 ) then
中文 else
英文
end;
 
当初我在看Delphi 源码时,有一个函数可以判断取的是双字
高字节还是低字节, 这样就不会出现半个字了,可惜我刚才
找了半天也没再发现, 不知道有谁知道?
 
用isleap函数
 
isleap在哪个单元中定义的?
 
我也没有找到isleap函数,只有一个isleapyear的!
怎么判断半个汉字呢?因为我的程序有很多的循环,我不想编的太复杂了!
 
那个函数一点用都没有,不要想了。
不如记数,从最后一个字符往前边历,每一个大于127的字符记数加1,碰到小于127的字符停下来,若记数为奇,有半个汉字,把最后的一个字符cut就行了。
 
我写了一个测试的程序:
teststr:='就地方今年89kdk打开';
a:=pchar(teststr);
for i:=0 to length(teststr)do
begin
k:=ord(a[0]);
end;
到取asc的时候就不执行了,跳了过去,为什么?
 
应该这样:
teststr:='就地方今年89kdk打开';

for i:=1 to length(teststr)do
begin
//从1开始
k:=ord(a);

end;
 
我写了一个测试的程序:
teststr:='就地方今年89kdk打开';
a:=pchar(teststr);
for i:=1 to length(teststr)do
begin
k:=ord(a);
end;
到取asc的时候就不执行了,跳了过去,为什么
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
628
import
I
后退
顶部