譬如有: 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值来反向生成字符串。这有什么解决办法没有。
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值来反向生成字符串。这有什么解决办法没有。
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))
不知道对你是否有用?
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就会收到一大堆"??"。
我曾经就被他这个特点气的吐血,你自己说说有什么办法解决没有。
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)
str1 = "A你"
bytetmp = StrConv(str1, vbFromUnicode)
接收时:
str2=StrConv(bytetmp, vbUnicode)