Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/dotnet/cultureinfo/.
Сегодня мы поговорим о региональных настройках. Но сперва — небольшая задачка: что выведет нижеприведённый код? (Код приведён на языке C#, но рассматривается достаточно общая проблематика, так что вы можете представить на его месте какой-нибудь другой язык.)
Console.WriteLine((-42).ToString() == "-42"); Console.WriteLine(double.NaN.ToString() == "NaN"); Console.WriteLine(int.Parse("-42") == -42); Console.WriteLine(1.1.ToString().Contains("?") == false); Console.WriteLine(new DateTime(2014, 1, 1).ToString().Contains("2014")); Console.WriteLine("i".ToUpper() == "I" || "I".ToLower() == "i");
Сколько значений true
у вас получилось? Если больше 0, то вам не мешает узнать больше про региональные настройки, т. к. правильный ответ: «зависит». К сожалению, многие программисты вообще не задумываются о том, что настройки эти в различных окружениях могут отличаться. А выставлять для всего кода InvariantCulture этим программистом лениво, в результате чего их прекрасные приложения ведут себя очень странно, попадая к пользователям из других стран.
Ошибки бывают самые разные, но чаще всего связаны они с форматированием и парсингом строк — достаточно частыми задачами для многих программистов. В статье приведена краткая подборка некоторых важных моментов, на которые влияют региональные настройки.