某些简化规则
如果程序员未注意到多字节字符集设计的一些限制(这些限制允许许多程序在多字节语言环境中高效运行而几乎不用国际化函数)则可能编写出缓慢、多语言应用程序。
例如:
- 在 IBM®支持的所有代码集中,字符代码 0x00 到 0x3F 是唯一的,并对 ASCII 标准字符进行编码。 唯一是指这些位组合不会作为多字节字符的字节之一出现。 因为空字符是该集的一部分,所以 strlen()、strcpy() 和 strcat() 函数用来处理多字节以及单字节字符串。 程序员必须牢记 strlen() 返回的值是字符串中的字节数,而不是字符数。
- 同样地,标准字符串函数 strchr(foostr, '/') 在所有语言环境下都运行正常,因为 /(斜杠)是唯一代码点范围的一部分。 实际上,大多数标准定界符在 0x00 到 0x3F 的范围内,所以大部分语法分析不用依赖国际化函数或转化为 wchar_t 格式就能完成。
- 字符串的比较会出现两类情况:相等或不等。 使用标准 strcmp() 函数来执行比较。 当你写入:
if (strcmp(foostr,"a rose") == 0)您未在寻找"a rose"任何其他名称; 您仅查找该组位。 如果foostr包含"a rosE"找不到匹配项。
- 当你要尝试在语言环境定义的校勘序列中排列字符串时,将发生不等比较。 在那种情况下,你应使用:
if (strcoll(foostr,barstr) > 0)并且为获取每个字符的校勘信息要付出性能代价。
- 当执行程序时,它始终在 C 语言环境中开始。 如果它将使用一个或多个国际化函数(包括访问消息目录)则它必须执行:
setlocale(LC_ALL, "");以在调用任何国际化函数前切换至其父进程的语言环境。