本帖最后由 bcrun 于 2012-03-30 21:21:35 编辑

解决方案 »

  1.   

    你应该仔细看看 UTF-8 定义,16 位 Unicode 的转换为
    U+0000 ~ U+007F -> 1字节
    U+0080 ~ U+07FF -> 2字节
    U+0800 ~ U+FFFF -> 3字节其实你可以变更一下处理次序:
    先将字段值转 UTF-8,然后再用空格补齐长度,这样就省去单独计算长度的操作了。
      

  2.   

    http://www.hexagora.com/en_dw_unictrl.asp
      

  3.   

    l = lenB(StrConv(text1.Text, vbFromUnicode))
    这就是实际长度。
      

  4.   

    本帖最后由 bcrun 于 2012-04-07 08:37:03 编辑
      

  5.   

    UnicodeToUtf8() 内部不是已经有长度了,将它作为参数传出去。
      

  6.   

    大哥,长度就是lResult嘛?怎么传出去呢?在模块里定义一个全局的变量,每次调用UnicodeToUtf8()都给这个全局变量赋值?还是说应该修改这个函数UnicodeToUtf8(ByVal UCS As String),变成UnicodeToUtf8(ByVal UCS As String,ByVal Len As Interger), 加一个传入参数,如果lResult不够就补充空格?不好意思啊,我很菜。。雷倒各位高手了。。罪过啊罪过
      

  7.   

    dim arrBuf as byte()
    arrBuf = UnicodeToUtf8("XXXXX")然后 Len(arrBuf) ,不就是转换后的长度?
      

  8.   

    如果 UnicodeToUtf8() 没有别的用途,可以考虑按指定长度进行补空。
      

  9.   


    把原来计算长度的函数改成下面的就okay啦,改动超小。谢谢上面各位高手的帮助~!
    lResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(UCS), lLength, abUTF8(0), lBufferSize, vbNullString
      

  10.   


    Len(arrBuf)不对,测试arrBuf = UnicodeToUtf8("text1"),Len(arrBuf)=2..