你要判断你是否取到了多字节字符中间? 如果是, 则可以向前后拷一个,或向后多拷一个.发个函数你可以参考一下:function InterceptLayerName(const ALayerName: string; const ALen: Byte = 20): string;var iLen: Integer; iFrontPos, iBackPos: Integer; iByteType: TMbcsByteType;begin iLen := Length(ALayerName); if iLen > ALen then begin iFrontPos := ALen div 2; // 非单字节字符, 保证不要截到多字节字符的中间, 否则产生乱码 iByteType := ByteType(ALayerName, iFrontPos); while not (iByteType in [mbTrailByte, mbSingleByte]) do begin Inc(iFrontPos); iByteType := ByteType(ALayerName, iFrontPos); end; iBackPos := iLen - (ALen div 2); iByteType := ByteType(ALayerName, iBackPos); while not (iByteType in [mbLeadByte, mbSingleByte]) do begin Dec(iBackPos); iByteType := ByteType(ALayerName, iBackPos); end; Result := Copy(ALayerName, 1, iFrontPos) + Copy(ALayerName, iBackPos, iLen - iBackPos + 1); end else Result := ALayerName;end;