返回按指定类型转换的 Variant (String)。
语法
StrConv(string, conversion, LCID)
StrConv 函数的语法有下面的命名参数:
部分 | 说明 | string | 必要参数。要转换的字符串表达式。 | conversion | 必要参数。Integer。其值的和决定转换的类型。 | LCID | 可选的。如果与系统LocaleID不同,则为LocaleID(系统LocaleID为缺省值。) |
设置值
conversion 参数的设置值为:
常数 | 值 | 说明 | vbUpperCase | 1 | 将字符串文字转成大写。 | vbLowerCase | 2 | 将字符串文字转成小写。 | vbProperCase | 3 | 将字符串中每个字的开头字母转成大写。 | vbWide* | 4* | 将字符串中单字节字符转成双字节字符。 | vbNarrow* | 8* | 将字符串中双字节字符转成单字节字符。 | vbKatakana** | 16** | 将字符串中平假名字符转成片假名字符。 | vbHiragana** | 32** | 将字符串中片假名字符转成平假名字符。 | vbUnicode | 64 | 根据系统的缺省码页将字符串转成 Unicode。 | vbFromUnicode | 128 | 将字符串由 Unicode 转成系统的缺省码页。 |
*应用到远东国别。
**仅应用到日本。
注意 这些常数是由 VBA 指定的。可以在程序中使用它们来替换真正的值。其中大部分是可以组合的,例如 vbUpperCase + vbWide,互斥的常数不能组合,例如 vbUnicode + vbFromUnicode。当在不适用的国别使用常数 vbWide、vbNarrow、vbKatakana,和 vbHiragana 时,就会导致运行时错误。
下面是一些一般情况下的有效分界符:Null (Chr$(0)),水平制表符 (Chr$(9)),换行 (Chr$(10)),垂直制表符 (Chr$(11)),换页 (Chr$(12)) ,回车 (Chr$(13)),空白 (SBCS) (Chr$(32))。在 DBCS中,空白的实际值会随国家/地区而不同。
说明
在把 ANSI 格式的 Byte 数组转换为字符串时,您应该使用 StrConv 函数。当您转换 Unicode 格式的这种数组时,使用赋值语句。
特殊举例1:
Option Explicit
Private Sub Command1_Click() Dim b() As Byte Dim s As String s = "aaa;ss;111;美丽的误会" Debug.Print s b = StrConv(s, vbFromUnicode) ' 字符串转成数组 s = StrConv(b, vbUnicode) ' 数组转成字符串 Debug.Print s End Sub
特殊举例2:
Option Explicit
Private Sub Command2_Click() Dim b() As Byte Dim s As String s = "aaa;ss;111;中国" Debug.Print s b = StrConv(s, vbFromUnicode) ' 字符串转成数组 s = StrConv(b, vbUnicode) ' 数组转成字符串 Debug.Print s End Sub
Windows系统对字符采用了DBCS编码,它是一套单字节和双字节的混合编码,即西文与ASCII编码一样,是单字节;中文则以两字节编码。(注意,这是以字节为准的。计算其字符串长度只能用LenB(),因为LenB()是计算字节数的。)
VB中采用的是Unicode(国际标准化组织字符(ISO)标准)来存储和操作字符串。它是全部用两个字节表示一个字符的字符集。
而StrConv()函数的作用就是作为Unicode与DBCS之间的转换。
--- StrConv(paraStr,vbFromUnicode) 就是将paraStr字符串由Unicode码转为DBCS码
---
如果要将DBCS转为Unicode则是这个形式StrConv(Str,vbUnicode)。
---
LenB(StrConv(paraStr,vbFromUnicode))就是先将Unicode码的paraStr字符串转为DBCS码再计算长度,而DBCS码的特性就是“英文算一个,中文算两个”,嘿嘿......
=======================
Option Explicit Dim str1 As String, str2 As String, str3 As String, i As Long
Private Sub Command1_Click() str1 = "美丽的误会。aaafssuck老师" Debug.Print StrConv(str1, vbFromUnicode) '转为DBCS编码就是英文一个占1Byte,汉字占2个byte,29位一共 Debug.Print LenB(StrConv(str1, vbFromUnicode)) Debug.Print StrConv(StrConv(str1, vbFromUnicode), vbUnicode) '转为Vb版的Unicode,统统算两位。为什么这么写呢?防止重复转换,以前就就死在这个地方了。 Debug.Print LenB(StrConv(StrConv(str1, vbFromUnicode), vbUnicode)) Debug.Print LenB(StrConv(StrConv(StrConv(str1, vbFromUnicode), vbUnicode), vbFromUnicode)) '再次转DBCS编码,再看还是29位 MsgBox StrConv(StrConv(str1, vbFromUnicode), vbUnicode) End Sub
摘自:网络整理
|