leftB() and rightB()也是不行的leftB()和rightB()会将英文字符也作为2个Byte虽然 LeftB("问题是left",6)="问题是" 但是 LeftB("问题是left",8)="问题是l"
Public Function LeftEx(ByVal str As String, ByVal Lenth As Long) As String If str = "" Then LeftEx = str Else LeftEx = StrConv(LeftB$(StrConv(str, vbFromUnicode, 2052), Lenth), vbUnicode, 2052) End If End Function
LeftEx("问题是left",6) LeftEx("问题是left",8)
但 leftex("问题是left",3)="问" ,这个解决不好.
这是我的程序里一段代码,你们看看,我的方法的确解决了这个问题。 ll_lem = 100 ls_tmp = String(100, Chr(0)) ll_rtn = GetPrivateProfileString("Database", "Foxpro", " ", ls_tmp, ll_lem, App.Path + "\Config.ini") If ll_rtn > 0 Then ls_tmp = Trim(Left(ls_tmp, ll_rtn)) For i = ll_rtn - 1 To 1 Step -1 If Mid(ls_tmp, i, 1) <> Chr(0) Then Exit For End If Next i FPath = Trim(Left(ls_tmp, i)) Else FPath = App.Path End If
Right("问题是left", 6)= 题是left
right("问题是left",6)="是left"
right(strconv("问题是left",2),6)试试
但是 LeftB("问题是left",8)="问题是l"
If str = "" Then
LeftEx = str
Else
LeftEx = StrConv(LeftB$(StrConv(str, vbFromUnicode, 2052), Lenth), vbUnicode, 2052)
End If
End Function
LeftEx("问题是left",8)
ls_tmp = String(100, Chr(0))
ll_rtn = GetPrivateProfileString("Database", "Foxpro", " ", ls_tmp, ll_lem, App.Path + "\Config.ini")
If ll_rtn > 0 Then
ls_tmp = Trim(Left(ls_tmp, ll_rtn))
For i = ll_rtn - 1 To 1 Step -1
If Mid(ls_tmp, i, 1) <> Chr(0) Then
Exit For
End If
Next i
FPath = Trim(Left(ls_tmp, i))
Else
FPath = App.Path
End If
1。如果字符不是很多的话,一个一个判断是不是unicode,是的话就转换成ascii。
2。用copymemory函数。
楼主的问题应该可以这样解决:
StrConv(LeftB(StrConv("问题是left", vbFromUnicode), 6), vbUnicode)
StrConv(LeftB(StrConv("问题是left", vbFromUnicode), 6), vbUnicode)