双字节字符集

双字节字符集(DBCS)也称为“扩展的 8 位字符集”,是作为代码页实现的扩展 单字节字符集(SBCS)。 DBCS 最初旨在扩展 SBCS 设计,以处理日语和中文等语言。 DBCS 中的某些字符(包括用于编写英语的数字和字母)具有单字节代码值。 其他字符(如中文象形字或日语汉字)具有双字节代码值。 DBCS 可以对应于 Windows 代码页或 OEM 代码页。 DBCS 代码页还可以包含非本机代码页,例如 EBCDIC 代码页。 有关这些代码页的定义,请参阅 代码页

注意

新的 Windows 应用程序应使用 Unicode 以避免不同代码页的不一致以及便于本地化。 但是,某些旧协议可能需要使用 DBCS 代码页。 每个 DBCS 代码页支持不同的字符,但没有一个页面支持 Unicode 提供的完整字符范围。 每个 DBCS 代码页支持不同的子集,以不同的编码方式。 从一个 DBCS 代码页转换为另一个 DBCS 代码页的数据可能会损坏,因为不同代码页上的相同数据值可以编码不同的字符。 从 Unicode 转换为 DBCS 的数据可能会丢失数据,因为给定的代码页可能无法表示该特定 Unicode 数据中使用的每个字符。

 

若要解释 DBCS 字符串,应用程序必须从字符串开头开始并向前扫描。 它会跟踪在字符串中遇到前导字节时,并将下一个字节视为同一字符的尾随部分。 如果应用程序一次扫描一个字节的字符串,并遇到一个字节,该字节似乎是表示反斜杠(“\”)的代码值,则该字节可能只是双字节字符的尾随字节。 应用程序不能只备份一个字节来查看前面的字节是否为前导字节,因为该字节值可能有资格同时用作前导字节和尾随字节。 因此,应用程序与可能的反斜杠基本上具有相同的问题。 换句话说,子字符串搜索比使用 SBCS 或 Unicode 的 DBCS 要复杂得多。 因此,支持 DBCS 的应用程序必须使用特殊函数,例如 _mbsstr,而不是 StrStr 函数。

应用程序将 DBCS Windows 代码页与 Windows 函数的“A”版本配合使用。 请参阅函数原型 代码页 约定。 为了帮助标识 DBCS 代码页,应用程序可以使用 GetCPInfoGetCPInfoEx 函数。 应用程序可以使用 IsDBCSLeadByte 函数来确定给定值是否可以用作 2 字节字符的前导字节。 此外,应用程序还可以使用 MultiByteToWideCharWideCharToMultiByte 函数在 Unicode 和 DBCS 字符串之间映射。

字符集

单字节字符集