Это, вероятно, слишком поздно для вас, но, возможно, это поможет кому-то еще.Boost :: format принимает std :: locale в качестве необязательного параметра шаблона.(см. http://www.boost.org/doc/libs/1_55_0/libs/format/doc/format.html). Если вы передадите ему локаль с поддержкой юникода, например, boost :: locale ("en_US.UTF-8"), вы должны получить желаемое поведение.
Вместо передачилокали каждый раз для конструктора boost :: format, вы также можете установить локаль по умолчанию для вашего приложения, что может помочь вам избежать других проблем. Если вы выберете этот путь, я бы рекомендовал использовать boost :: locale вместоstd :: locale, так как boost :: locale не будет изменять ваше числовое форматирование, если вы не попросите об этом подробно (docs here ).
В общем, это подход goto длязаставить приложение в C ++ прекрасно работать с Unicode. Если функциональность может использовать локаль (std :: regex, std :: sort, boost :: format), предоставьте ей локаль с поддержкой юникода, и вы должны быть в безопасности (и если выне «пожалуйста, скажите мне, я хочу знать).
Если вы делаете небольшое, легкое приложение и заботитесь только о 80% случае, вы можете не захотеть платить цену за включение ICU (Internation Components).для Unicode), который является языковым стандартом для усиления двигателя по умолчанию, при поддержке unicde.В этом случае создайте Boos, используя поддержку Unicode в вашей ОС или Posix, и ваше приложение останется небольшим и легким, но у вас не будет большой поддержки Unicode, например, нескольких уровней сортировки.
Для решения проблемы выописывая, поддержка Posix, вероятно, достаточно.