返回按指定类型转换的 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
相关函数文章参考:
※VB 获取Textbox文本框中的行数函数
※VB获取windows各常用目录的函数(模块)
※VB:常用内部函数大全,你会了几个呢?
※VB后台获得按键,并执行自己的函数(非钩子及热键)
※利用VB函数Dir()实现递归搜索目
※巧用SendMessage函数扩展Treeview功能
※比CopyMemory还要快的函数SuperCopyMemory
※VB利用API函数来处理文件
※利用VB函数Dir()实现递归搜索目录
※利用API函数计算程序运行时间VB
※利用VB函数Dir()实现递归搜索目录
※VB Environ系统环境变量函数大全