VB 如何将字符串变量中的乱码字符转换为可识别可读的字符

作者&投稿:衡溥 (若有异议请与网页底部的电邮联系)
VB 读取MP3 ID3V2信息时,显示的字符文本为无法识别的文字,如何转换~

Private Sub Form_Load()
Dim aa() As Byte
aa = StrConv("拏鑺变箣姊", vbFromUnicode)
a = BytesToBstr(aa, "utf-8")
'a是返回值结果是 “ 花之” 你直接把变量传过去试一试
End Sub
Function BytesToBstr(body, Cset)
Dim objstream
Set objstream = CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode = 3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
Set objstream = Nothing
End Function

这样可以得到结果是“花之”
你加到你的代码里试一试

dim iChar as string
iChar="我是汉字字符串" 'vb的string类型可以完美支持汉字,只是占用的空间是英文的两倍
dim 我 as string '另外vb是支持定义汉字名称的变量的,只是问题很多,不建议使用
我="7zig“
me.print 我

'UTF-8(UTF8EncodeURI)和GB2312(GBKEncodeURI)编码的转换2007年11月16日 星期五 19:50  在使用Google或者百度进行中文搜索的时候,我们会发现搜索过程中URL地址栏会变成一串格式字符串编码,我们编写程序经常也需要进行中文汉字到这类URL编码的转换,这里介绍两段相关的转换函数。
'
'  对于使用UTF-8的Google搜索引擎来说,使用Google搜索“汉字”会变成http://www.google.com/search?q=%E6%B1%89%E5%AD%97 ,而对于使用GB2312的百度搜索引擎来说,使用百度搜索“汉字”会变成另外的 http://www.baidu.com/s?wd=%BA%BA%D7%D6 。下面的两段VB代码分别针对UTF-8(UTF8EncodeURI)和GB2312(GBKEncodeURI)进行了编码的转换。

Private Sub Command1_click()
Debug.Print (UTF8EncodeURI("汉字"))
Debug.Print (GBKEncodeURI("汉字"))
End Sub

Function UTF8EncodeURI(szInput)
Dim wch, uch, szRet
Dim x
Dim nAsc, nAsc2, nAsc3

If szInput = "" Then
UTF8EncodeURI = szInput
Exit Function
End If

For x = 1 To Len(szInput)
wch = Mid(szInput, x, 1)
nAsc = AscW(wch)

If nAsc < 0 Then nAsc = nAsc + 65536

If (nAsc And &HFF80) = 0 Then
szRet = szRet & wch
Else
If (nAsc And &HF000) = 0 Then
uch = "%" & Hex(((nAsc \ 2 ^ 6)) Or &HC0) & Hex(nAsc And &H3F Or &H80)
szRet = szRet & uch
Else
uch = "%" & Hex((nAsc \ 2 ^ 12) Or &HE0) & "%" & _
Hex((nAsc \ 2 ^ 6) And &H3F Or &H80) & "%" & _
Hex(nAsc And &H3F Or &H80)
szRet = szRet & uch
End If
End If
Next

UTF8EncodeURI = szRet
End Function

Function GBKEncodeURI(szInput)
Dim i As Long
Dim x() As Byte
Dim szRet As String

szRet = ""
x = StrConv(szInput, vbFromUnicode)
For i = LBound(x) To UBound(x)
szRet = szRet & "%" & Hex(x(i))
Next
GBKEncodeURI = szRet
End Function

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii >= 48 And KeyAscii <= 57 Then
Text2 = Text2 & Chr(KeyAscii)
ElseIf KeyAscii >= 65 And KeyAscii <= 90 Then
KeyAscii = KeyAscii + 32
Text2 = Text2 & Chr(KeyAscii)
KeyAscii = KeyAscii - 32
ElseIf KeyAscii >= 97 And KeyAscii <= 122 Then
KeyAscii = KeyAscii - 32
Text2 = Text2 & Chr(KeyAscii)
KeyAscii = KeyAscii + 32
Else
MsgBox "输入错误"
End If
End Sub


因误会


启东市18556166781: 如何解决 VB 获取UTF8 显示乱码的问题 -
邴卖吡嗪: VB6.0可声明一个Object 数据类型,使用它的Charset属性为"UTF8",可解决TextBox控件中UTF8文本显示乱码问题.Object 数据类型,Object 变量存储为 32 位(4 个字节)的地址形式,其为对象的引用.利用 Set 语句,声明为 Object 的变...

启东市18556166781: VB 输入一行字符串,将其中的非字母字符剔除,然后将字母全部转换为大写字母 -
邴卖吡嗪: Dim str As String, str2 As String, n As Integer '定义str,str2 为字符串变量,n为整型变量 str = InputBox("", "输入一行字符串!") '将输入框内容付给str n = Len(str) '取str长度 Dim ar(n) As String, i As Integer '定义一数组和一整型变量 For i ...

启东市18556166781: VB 读取MP3 ID3V2信息时,显示的字符文本为无法识别的文字,如何转换 -
邴卖吡嗪: Private Sub Form_Load() Dim aa() As Byte aa = StrConv("拏鑺变箣姊", vbFromUnicode) a = BytesToBstr(aa, "utf-8")'a是返回值结果是 “ 花之” 你直接把变量传过去试一试 End Sub Function BytesToBstr(body, Cset)Dim objstream ...

启东市18556166781: vb中串口通讯出现乱码 -
邴卖吡嗪: 当设置MSComm 控件的InputMode 属性为comInputModeBinary时,串口是按返回一数据组的二进制数据(Byte)字节的数组,但MSComm1.Input可赋值给一个String变量strBuff,在转赋值给Byte数组BytReceived(),而不会出现歧义,其接收...

启东市18556166781: vb unicode问题 例如utf8 转换 -
邴卖吡嗪: 我这个回答可能会让LZ失望....据我知道,如果你用的英语或者中文windows系统,VB6对Unicode的支持是很不好的,比如你的文件名含有欧洲语言的特殊字母或者比如阿拉伯语之类的字符,或者你的文件中含有这些字母,读出来的就是乱码.如果是读文件,Unicode编码的文件可以用binary的方法open,但是文件的开头会有个小乱码,不过也分是endian和big endian的类型,很复杂.如果是处理多语言或者Unicode的字符,建议楼主还是换程序语言吧...比如上标的TM符号,vb6是完全处理不了的.

启东市18556166781: vc 中怎样将字符串在乱码和真正的字符串之间转换
邴卖吡嗪: char* 是指向字符的指针类型. 其实你需要存入文件的,一般还是char型字符串吧. 想让它不被记事本读取很简单,你把需要加密的字符串作为一个字符数组,采用一些加密算法对整个字符串进行加密就可以了. ASCII码中0x31对应字符'1',你...

启东市18556166781: vb中输入一段字符,要求去除其他,只留下大写字母,并按从z到a的逆向顺序输出 -
邴卖吡嗪: 新建一工程,在窗体上拖入一个Command控件即可.然后进代码区,删除所有代码后,粘贴以下代码即可:Option Explicit Private Sub Command1_Click() Dim InS As String, S As String, T As String Dim I As Integer, J As Integer, L As String ...

启东市18556166781: VB和VBS如何清除ASCII码为28的控制字符,用什么函数 -
邴卖吡嗪: ASCII 码在1到31的字符,都是一些“控制字符”,基本都是属于“非显示字符”的. 假设有变量 sText 中,包含了一些象这样的字符,要去掉,就象下面这样写: 去掉FS: sText = Replace(sText, Chr$(28), "") 去掉DLE: sText = Replace(sText, Chr$(16), "") 其它控制字符的编码,楼主可以参考下表(控制字符下的小字编码是16进制码):

启东市18556166781: vb创建数据库,进行查询的时候,输入的字符成了乱码怎么回事
邴卖吡嗪: 数据库中的栏位没有设成对应的字符编码. 假设数据库中栏位的字符编码默认为中文简体,而你输入了中文繁体,则会乱码,反之亦然. 解决方法是将要存放中文字符的栏位类型设为 NVARCHAR 或NCHAR 就可以了

启东市18556166781: 急急急!!!vb调用c dll来改变vb中string类型的值,为什么返回是乱码 -
邴卖吡嗪: 个人觉得是编码问题,VB使用的unicode,你的dll也是unicode项目,或者你写那个字符串要自己写成unicode编码.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网