虽然双字节字符由一个前导字节和一个后续字节组成,并存储在两个连续的字节里,但是在任何涉及到字符和字符串的操作时,它应作为一个单元处理。一些字符串操作函数可以处理基于字符的所有字符串,包括 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
Visual Basic 提供了一些对 DBCS 字符进行字符串转换的函数:StrConv、UCase 和 LCase。
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 字符的英语全角字符的大小写转换。