譬如有: str1 = "A你"
bytetmp = StrConv(str1, vbFromUnicode)
则得到的结果为
bytetmp(0) = 65  bytetmp(1) = 196 bytetmp(2) = 227
而 "你"的Unicode值: Ascw("你")= 20320
那么bytetmp(1)、bytetmp(2) 与 20320 是怎样的一种关系呢?现在我只能发送bytetemp数组,其它的方法是行不通的,因为EVB中,winsocket只能发送字符串形和整型,现在我只会发字符串型,整型的发送时老是出错!因为我可能要把bytetmp发送到java程序中,在java程序中根据unicode值来反向生成字符串。这有什么解决办法没有。

解决方案 »

  1.   

    Dim f
    Dim L1, R1 As Integer
    Dim InputStr As String
    InputStr = "你"
    f = Hex(Asc(InputStr))
    L1 = CInt("&H" + Mid(f, 1, 2))
    R1 = CInt("&H" + Mid(f, 3, 2))  
    不知道对你是否有用?
      

  2.   

    str1 = "A你"  //注释:str1 在内存中按 UNICODE 码存贮字符
    bytetmp = StrConv(str1, vbFromUnicode)
    //注释:转换结果是在内存中按ANSI码贮存的字符串
    则得到的结果为
    bytetmp(0) = 65  bytetmp(1) = 196 bytetmp(2) = 227//注释:正确无误的字符的ANSI码
    而 "你"的Unicode值: Ascw("你")= 20320//注释:对
    那么bytetmp(1)、bytetmp(2) 与 20320 是怎样的一种关系呢?
    //注释:ASNI码和UNICODE码之间毫无任何关系。系统是根据一张对照表来进行转换的现在我只能发送bytetemp数组,其它的方法是行不通的,因为EVB中,winsocket只能发送字符串形和整型,现在我只会发字符串型,整型的发送时老是出错!因为我可能要把bytetmp发送到java程序中,在java程序中根据unicode值来反向生成字符串。这有什么解决办法没有。
    //注释:VB的内核是UNICODE的,但和其他程序的接口是ANSI的(简直变态,真真气死人了)。就是说不管通过任何手段传递数据出去,VB都要把你精心准备好的数据按 UNICODE->ANSI 的方式转换一下;而他接受到的任何数据,他都要按 Ansi->Unicode的方式转换一下。也就是说如果传出前你给他准备的数据不是 UNICODE 的,对方就会收到一大堆"??",而发送数据给VB的任何程序,只要发送的不是 ANSI码,VB就会收到一大堆"??"。
    我曾经就被他这个特点气的吐血,你自己说说有什么办法解决没有。
      

  3.   

    如果对方一定要 UNICODE 码,你就得用 chrb(midb(str1,n,1)) 逐字节或用chrW(...)逐字取得字符串的UNCODE编码,组合成数据块,按二进制的方式发出去。非常麻烦。可是VB既然那么变态,你为何非用它不可?
      

  4.   

    如果VB的字符串在内存中真是以Unicode形式存放的,试试用CopyMemory(API:kernel32.dll)。直接将内存中Unicode字符串复制到字节数组中。
      

  5.   

    解:
    Dim f
    Dim L1, R1 As Integer
    Dim InputStr As String
    InputStr = "你"
    f = Hex(Asc(InputStr))
    L1 = CInt("&H" + Mid(f, 1, 2))
    R1 = CInt("&H" + Mid(f, 3, 2))  还原:Dim bArr(1) As Byte
    Dim sMe as String
    bArr(0) = L1
    bArr(1) = r1
    sMe = StrConv(bArr, vbUnicode)此方式还可用于COM口通讯时汉字的还原。另外还有一种还原方法:Dim sMe as String
    Dim PutCode As String
    PutCode = "CED2"
    sMe = Chr("&H" + PutCode)
     
      

  6.   

    发送时:
    str1 = "A你"
    bytetmp = StrConv(str1, vbFromUnicode)
    接收时:
    str2=StrConv(bytetmp, vbUnicode)