DBCS 字符串操作函数

虽然双字节字符由一个前导字节和一个后续字节组成,并存储在两个连续的字节里,但是在任何涉及到字符和字符串的操作时,它应作为一个单元处理。一些字符串操作函数可以处理基于字符的所有字符串,包括 DBCS 字符。

这些函数有 ANSI/DBCS 版本、二进制版本或者 Unicode 版本,如下表所示。根据操作字符串的目的,使用适当的函数。

下表中函数的“下”版本尤其适合于使用二进制数据的字符串,“W”版本适合于使用 Unicode 的字符串。

函数 描述
Asc 返回字符串第一个字符的 ANSI 或 DBCS 字符代码。
AscB 返回给定包含二进制数据的字符串第一个字节的值。
AscW 返回字符串第一个字符的 Unicode 字符代码。
Chr 返回包含指定 ANSI 或 DBCS 字符代码的字符串。
ChrB 返回包含指定字节的二进制字符串。
ChrW 返回包含指定 Unicode 字符代码的字符串。
Input 从文件中返回指定数目的 ANSI 或 DBCS 字符。
InputB 从文件中返回指定数目的字节。
InStr 返回一字符串在另一字符串中第一次出现的位置。
InStrB 返回一字节在另一二进制字符串中第一次出现的位置。
Left, Right 返回字符串左边或右边指定数目的字符。
LeftB, RightB 返回二进制字符串左边或右边指定数目的字节。
Len 返回以字符数为单位的字符串长度。
LenB 返回以字节数为单位的字符串长度。
Mid 从字符串中返回指定数目的字符。
MidB 从二进制字符串中返回指定数目的字节。

表中没有 "B" 或 "W" 的函数能正确处理 DBCS 或 ANSI 字符。除上述函数以外,String 函数也能处理 DBCS 字符。这就是说所有函数把 DBCS 字符作为一个字符处理,即使该字符由两个字节组成。

当处理 SBCS 和 DBCS 字符时,这些函数的过程是不同的。例如,在 Visual Basic 中使用 Mid 函数从字符串中返回指定数目的字符。在使用 DBCS 的区域中,字符数和字节数不一定相同,Mid 函数只返回字符数而不是字节数。

大多数情况下,由于这些函数能够正确处理 ANSI、DBCS 和 Unicode 字符串,因此处理字符串数据时,都使用基于字符的函数。

基于字节的字符串操作函数,例如 LenB 和 LeftB 用于处理二进制数据的字符串数据。当向 String 变量存储字符或从 String 变量读取字符时,Visual Basic 会自动完成 Unicode 和 ANSI 字符间的转换。当处理二进制数据时,应使用 Byte 数组而不是 String 变量和基于字节的字符串操作函数。

详细信息 关于相应的函数,请参阅《语言参考》。

处理二进制数据的字符串时,使用下列代码将字符串中的字符映射到 Byte 数组中:

Dim MyByteString() As Byte
'将字符串映射到一 Byte 数组中。
MyByteString = "ABC"
'显示二进制数据。
For i = LBound(MyByteString) to UBound(MyByteString)
   Print Right(" " + Hex(MyByteString(i)),2) + " ,";
Next
Print

DBCS 字符串转换

Visual Basic 提供了一些对 DBCS 字符进行字符串转换的函数:StrConv、UCase 和 LCase。

StrConv 函数

StrConv 函数的全局选项是将大写转换成小写或将小写转换成大写。此外,该函数还有一些 DBCS 特定的选项。例如,通过指定该函数第二个参数中的 vbWide,可将半角字符转换成全角字符。也可用此函数将一种字符类型转换成另一种字符类型,如日语中的平假名转换成片假名。如果与系统的 LocaleID 不同,StrConv 允许您为该字符串指定一个 LocaleID。

也可使用 StrConv 函数将 Unicode 字符转换成 ANSI/DBCS 字符或将 ANSI/DBCS 字符转换成 Unicode 字符。通常,Visual Basic 中的字符串由 Unicode 字符组成。当需要处理 ANSI/DBCS 字符串时(例如,在将字符串写入文件之前,计算字符串的字节数),可使用 StrConv 函数的这一功能。

全角字符的大小写转换

可使用 StrConv 函数的 vbUpperCase 或 vbLowerCase 选项,或者使用 UCase 或 LCase 函数进行字母的大小写转换。使用这些函数完成 DBCS 包括 ANSI 字符的英语全角字符的大小写转换。