This article is currently in the process of being translated into Chinese (~92% done).
Introduction
开发只能运行于本地几台计算机的软件的时代已经过去。尤其随着全球化和互联网的到来,如今的软件都应该全球通用,适用于不同类型的设备。这就意味着代码需要处理很多与文化相关的问题,如程序员无法完全预料到的数字和日期格式。例如在很多国家,小数(如,1.42)不用圆点,而是用逗号(如,1,42)来分隔小数部分。在很多国家,在日期格式中,天要放在月份前面,而有些国家则是年份在最前面。
处理这些问题当然非常麻烦,幸好.NET framework有几个类可以帮忙处理这些情况。最常用的是CultureInfo类,将会在下一章讨论,不过.Net还提供了一些处理地区差异的类,甚至有专门处理日历的类(要知道,不同国家,甚至日历都可能是不同的,是吧?)。
如果开发的是需要支持多语言的应用,本主题就更为重要了,不过即使不需要支持多语言,还是得考虑程序可能会运行在使用不同的日期,数字等标记集的设备上。下例就能展示出这有多重要:
string inputNumber = "1.425";
double usNumber = double.Parse(inputNumber, CultureInfo.GetCultureInfo("en-US"));
double germanNumber = double.Parse(inputNumber, CultureInfo.GetCultureInfo("de-DE"));
Console.WriteLine(usNumber.ToString() + " is not the same as " + germanNumber);假设inputNumber变量是用户输入的值,如,从某网页表单文本框输入的。上例使用double.Parse()方法把其从字符串转化为float类型,但传入了一个CultureInfo类型值作为第二个参数 - 如果不传入此参数,就会使用系统当前设置值,可能是英文,德文或其它完全不同的东西。注意上例的输出:
1,425 is not the same as 1425 震惊吧!数字变大了一千倍,因为德语使用逗号作为小数点,而把圆点用作千位分隔符。在多数应用中这都是个大问题,但好消息是,上例虽然展示了问题所在,同时也展示出了其解决方案:必需控制好输入格式,然后再进行相应操作,因为如上例所示,有了CultureInfo类,.NET可以用任何可能的格式来解析数字(及日期!),只需给出正确的参数。
总结
处理文化和地区差异在编程时可能比在现实中还要重要。幸好.NET framework在这方面提供了很大的帮助,只要找到正确的资料。下面几章会讨论.NET framework提供来处理这些差异的工具。