VB StrConv函数乱码的问题!
PrivateSubCommand1_Click()MsgBoxStrConv("金创药",vbUnicode)MsgBoxStrConv(StrConv("金创药",v...
Private Sub Command1_Click()
MsgBox StrConv("金创药", vbUnicode)
MsgBox StrConv(StrConv("金创药", vbUnicode), vbFromUnicode)
End Sub
第一个出现乱码,第二个出现 "金创。"这是为什么?
我想知道怎样才能得到金创药的UNICODE!
直接告诉我得到UNICODE的其他方法也行!(能互转)
那我知道金创药的UNICODE是 D1 91 1B 52 6F 83
我该如何用msgbox这条命令让他显示金创药? 展开
MsgBox StrConv("金创药", vbUnicode)
MsgBox StrConv(StrConv("金创药", vbUnicode), vbFromUnicode)
End Sub
第一个出现乱码,第二个出现 "金创。"这是为什么?
我想知道怎样才能得到金创药的UNICODE!
直接告诉我得到UNICODE的其他方法也行!(能互转)
那我知道金创药的UNICODE是 D1 91 1B 52 6F 83
我该如何用msgbox这条命令让他显示金创药? 展开
4个回答
展开全部
正如楼上所说,VB本身就是Unicode,如果你知道了Unicode的字节码,可以直接用它来构造VB的字符串。
举例:
Dim B1(0 to 5) As Byte
'下面你就把这个字节数组填充为你要转换的Unicode码:D1 91 1B 52 6F 83
B1(0) = &HD1
B1(1) = &H91
B1(2) = &H1B
B1(3) = &H52
B1(4) = &H6F
B1(5) = &H83
Dim Str1 as String
Str1 = B1 '直接将字节数组赋值给字符串
Msgbox Str1 '弹出对话框显示“金创药”
举例:
Dim B1(0 to 5) As Byte
'下面你就把这个字节数组填充为你要转换的Unicode码:D1 91 1B 52 6F 83
B1(0) = &HD1
B1(1) = &H91
B1(2) = &H1B
B1(3) = &H52
B1(4) = &H6F
B1(5) = &H83
Dim Str1 as String
Str1 = B1 '直接将字节数组赋值给字符串
Msgbox Str1 '弹出对话框显示“金创药”
展开全部
记住,在VB里,汉字是作为Unicode字符来处理的.
所以MsgBox StrConv("金创药", vbUnicode)这句是不正确的,应该用StrConv("金创药", vbFromUnicode)这种方式把汉字转换为非Unicode字符。
同理,第二句应该改为
MsgBox StrConv(StrConv("金创药", vbFromUnicode), vbUnicode)
所以MsgBox StrConv("金创药", vbUnicode)这句是不正确的,应该用StrConv("金创药", vbFromUnicode)这种方式把汉字转换为非Unicode字符。
同理,第二句应该改为
MsgBox StrConv(StrConv("金创药", vbFromUnicode), vbUnicode)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
vb里的汉字本来就是按unicode来处理的
转字符串
Public Function Decode(strDecode As String) As String
Dim i As Long
Dim strCode '存储转换后的编码
Dim chrTmp
On Error GoTo ErrProc
If Len(strDecode) Mod 4 <> 0 Then GoTo ErrProc
For i = 1 To Len(strDecode) Step 4
strCode = Mid(strDecode, i, 4)
chrTmp = Mid(strCode, 1, 2)
strCode = Mid(strCode, 3, 2) & chrTmp
chrTmp = ChrW("&H" & strCode)
If chrTmp = "?" Then If strCode <> "003F" Then GoTo ErrProc
Decode = Decode & chrTmp
Next
Exit Function
ErrProc:
End Function
转unicode
Public Function Encode(strEncode As String) As String
Dim i As Long
Dim chrTmp
Dim ByteLower, ByteUpper
Dim strReturn '存储转换后的编码
For i = 1 To Len(strEncode)
chrTmp = Mid(strEncode, i, 1)
ByteUpper = Hex(AscB(MidB(chrTmp, 1, 1)))
If Len(ByteUpper) = 1 Then ByteUpper = "0" & ByteUpper
ByteLower = Hex(AscB(MidB(chrTmp, 2, 1)))
If Len(ByteLower) = 1 Then ByteLower = "0" & ByteLower
strReturn = strReturn & ByteUpper & ByteLower
Next
Encode = strReturn
End Function
转字符串
Public Function Decode(strDecode As String) As String
Dim i As Long
Dim strCode '存储转换后的编码
Dim chrTmp
On Error GoTo ErrProc
If Len(strDecode) Mod 4 <> 0 Then GoTo ErrProc
For i = 1 To Len(strDecode) Step 4
strCode = Mid(strDecode, i, 4)
chrTmp = Mid(strCode, 1, 2)
strCode = Mid(strCode, 3, 2) & chrTmp
chrTmp = ChrW("&H" & strCode)
If chrTmp = "?" Then If strCode <> "003F" Then GoTo ErrProc
Decode = Decode & chrTmp
Next
Exit Function
ErrProc:
End Function
转unicode
Public Function Encode(strEncode As String) As String
Dim i As Long
Dim chrTmp
Dim ByteLower, ByteUpper
Dim strReturn '存储转换后的编码
For i = 1 To Len(strEncode)
chrTmp = Mid(strEncode, i, 1)
ByteUpper = Hex(AscB(MidB(chrTmp, 1, 1)))
If Len(ByteUpper) = 1 Then ByteUpper = "0" & ByteUpper
ByteLower = Hex(AscB(MidB(chrTmp, 2, 1)))
If Len(ByteLower) = 1 Then ByteLower = "0" & ByteLower
strReturn = strReturn & ByteUpper & ByteLower
Next
Encode = strReturn
End Function
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
MsgBox "金创药"
就可以显示出“金创药”了,还需要转换吗,VB自动进行UNICODE转换的,一般不需要人工干预。
就可以显示出“金创药”了,还需要转换吗,VB自动进行UNICODE转换的,一般不需要人工干预。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询