编程注意事项

存在多个涉及本地语言支持的编程问题。

历史上,C 语言已经在单词字节和字符可换性使用方面显示了一定的粗陋性。 因此,声明了一个数组char foo[10]是 10 个字节的数组。 但不是世界上所有的语言可以用单个字节的字符来表示。 例如,日语和汉语需要两个或更多的字节来确定一个要显示的特定的图形。 因而,我们要区别一个 8 位数据的字节和需要用大量信息来表示单个图形的字符。

每个语言环境都有两个特征,即在该语言环境中表示字符所需的最大数量的字节以及单个字符可占据的最大数量的输出显示位置。 这些值可以用 MB_CUR_MAXMAX_DISP_WIDTH 宏获取。 如果两个值都为 1,那么该语言环境中依旧保留字节和字符等价。 如果其中有一个值大于 1,那么执行字符接字符进程的程序或跟踪已使用显示位置数的各程序必须使用国际化的函数来这样做。

因为每个字符的多字节编码由包含不同数量的字节构成,所以它们不可作为字符数组来处理。 要在每个字符都需要深度处理的仿真环境中实现有效编码,已定义了一种固定字节宽度的数据类型 wchar_twchar_t 很宽,足够用来容纳任何受支持字符编码的翻译的格式。 因此程序员可声明 wchar_t 数组,并且处理它们时,可使用用于 char 数组的(大致)相同的逻辑,使用对传统 libc.a 函数的宽字符模拟。

遗憾的是,从在其中输入文本的多字节格式转化为(存储于磁盘或写至显示器)wchar_t 格式在计算上是非常昂贵的。 它只能在 wchar_t 格式的处理效率将高于转化为或从 wchar_t 格式转化的代价的环境中执行。