分享

【VB】StrConv函数.

 nxhujiee 2021-11-24

返回按指定类型转换的 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。当在不适用的国别使用常数 vbWidevbNarrowvbKatakana,和 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

摘自:网络整理

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多