双字节字符集

(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 字符串之间映射。

字符集

单字节字符集