按byte截取字符串问题

大神们,我遇到个问题,不知道大家有没有好的解决办法
VB程序输出一个字符串,用下面的方式处理的字符串
StrConv(MidB(StrConv(inputstring, vbFromUnicode), 1, 15), vbUnicode)
inputstring 是输入的字符串
是截取字符串前15byte,因为每个汉字是2个字节
在XP下,8个汉字的输入字符串,截取的结果是7个汉字+1个半角空格,正好是15byte
但是在windows7下,结果变成了7个汉字+1个"・","・"这个字符占了2个byte, 输出是16byte的字符串,结果出错了.
请问有什么简单的解决方法么
改程序什么的先不考虑,因为地方太多了,而且要重新发布,有没有什么改下环境之类的简单解决方案能解决这个问题呢,万分感谢

4个回答

如果你要截完整字符,是不是想复杂了,用strconv也就是中英文混合长度时用。如果截字符串个数
直接Mid(inputstring, 1, 5),
比如"7个汉字+1个",如果要到截取到”字“,那直接长度4就行了。如果要到1,那长度6

danielinbiti
danielinbiti 回复zhangkun0428: 那这种情况只能你自己把要截取的字节取出,根据ascii码判断一下是否是汉字,如果汉字取双字节
大约 5 年之前 回复
zhangkun0428
zhangkun0428 谢谢你的回复,这是工具函数的一段,函数是要截取输入字符串固定byte长度的字符串,而不是固定字符个数的字符串,所以才出现了截出半个汉字的问题
大约 5 年之前 回复

vb好古老了,支持你

如果inputstring 都是汉字,好办啊,直接取前7个汉字+空格

zhangkun0428
zhangkun0428 因为是一个工具函数,所以输入的字符串可能包含汉字,数字和字母,不太好办呀
大约 5 年之前 回复

那就用个函数来处理呗:

 Sub test()
    Dim w1 As String, Byt() As Byte, Byt1(14) As Byte, i As Integer
    w1 = "sf906=我们的祖国是个伟大的国家"
    Byt = StrConv(w1, vbFromUnicode)
    For i = 0 To 14
        Byt1(i) = Byt(i)
    Next
    Debug.Print StrConv(Byt1, vbUnicode)
End Sub

zhangkun0428
zhangkun0428 恩,谢谢, 要改函数肯定可以改过来,不过因为是客户那边的程序,要重新发布,很麻烦,因为在XP下是好用的,所以想会不会有环境的原因
大约 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问