当前位置: 代码迷 >> PB >> 汉字截取解决思路
  详细解决方案

汉字截取解决思路

热度:7   发布时间:2016-04-29 08:21:23.0
汉字截取
ls_string   =   ABS塑胶粒172BAGSPC塑胶粒52BAGSPC/ABS塑胶粒60BAGSPMMA塑胶粒12BAGSPOM塑

以上一排字符串,当我用leftW(ls_string,100)时,然后用messagebox测试,弹出
ABS塑胶粒172BAGSPC塑胶粒52BAGSPC/ABS塑胶粒60BAGSPMMA塑胶粒12BAGSPOM塑?,请问这是怎么回事,后面给加了一个问号,如果直接截取,会出现汉字截取不对的问题,如何解决,在线等

------解决方案--------------------
可以判断最后一个字符是否半个汉字。
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

create function fn_TruncSemiHanzi(@str varchar(4000))
returns varchar(8000)
as
begin
declare @sTmp varchar(8000),
@i int,
@itmp int,
@itmp2 int ,
@stmp2 varchar(2)

select @sTmp= ' '
select @i = 1

while @i <= len(@str)-1
begin
select @itmp=convert(int,substring(convert(varbinary,substring(@str ,@i,1)),1,1)) --截取一个字节
if @itmp> 127
begin
--大于127检查后面一个字节
select @itmp2=convert(int,substring(convert(varbinary,substring(@str ,@i,2)),2,1))
if @itmp2> 127
begin
select @stmp2=char(@itmp)+char(@itmp2) --是一个完整的汉字
select @i = @i + 2
end
else
begin
select @stmp2=char(@itmp2) --丢弃半个汉字
select @i = @i + 1
end
end
else
begin
select @sTmp2=char(@itmp)
select @i = @i + 1
end
select @[email protected][email protected]
end
return @stmp
end


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

  相关解决方案