Специфичные для локали проблемы to_lower с улучшенной локалью
Я экспериментирую с boost:: locale:: to_upper, чтобы сделать верхний регистр, специфичный для локали, в соответствии со страницей boost-locale http://www.boost.org/doc/libs/1_50_0/libs/locale/doc/html/conversions.html
Текст указывает, что я должен иметь возможность использовать boost:: locale:: to_upper для 'grüßEN' и получить результат 'GRÜSSEN' - это правильная версия, зависящая от локали в верхнем регистре (так что я считаю).
В моей тестовой версии я получаю "GRÜßEN", а не "GRÜSSEN".
Мой тестовый код выглядит следующим образом (я использую utf8cpp, чтобы проверить, что моя строка на самом деле utf8):
boost::locale::generator gen;
std::locale loc= gen("de_DE.UTF-8");
std::locale::global(loc);
cout.imbue(loc);
string s = "grüßEN";
if (utf8::is_valid(s.begin(), s.end())){
std::cout << s << " U= "<< boost::locale::to_upper(s) << std::endl;
}
Это на OSX (10.7.4) с использованием Xcode (4.1). Я установил ICU (49_1_2) с предложенными опциями -DU_USING_ICU_NAMESPACE=0 -DU_CHARSET_IS_UTF8=1. ICU находится в / usr / local / include / unicode, а библиотеки находятся в /usr/local/lib/libicu*.*
Я построил boost:: locale из набора 1_48 следующим образом:
./bjam boost.locale.iconv=off -sICU_PATH=/usr/local --with-locale stage
и при построении он сообщает:
Performing configuration checks
- icu : yes
Component configuration:
- chrono : not building
- date_time : not building
- exception : not building
- filesystem : not building
- graph : not building
- graph_parallel : not building
- iostreams : not building
- locale : building
- math : not building
- mpi : not building
- program_options : not building
- python : not building
- random : not building
- regex : not building
- serialization : not building
- signals : not building
- system : not building
- test : not building
- thread : not building
- timer : not building
- wave : not building
...patience...
...patience...
...found 1850 targets...
...updating 25 targets...
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv- off/threading-multi/encoding/codepage.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/threading-multi/icu/boundary.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/threading-multi/icu/codecvt.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/threading-multi/icu/collator.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/threading-multi/icu/conversion.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/threading-multi/icu/date_time.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/threading-multi/icu/formatter.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/threading-multi/icu/icu_backend.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/threading-multi/icu/numeric.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/threading-multi/icu/time_zone.o
darwin.link.dll bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/threading-multi/libboost_locale.dylib
common.copy stage/lib/libboost_locale.dylib
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv- off/link-static/threading-multi/encoding/codepage.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/icu/boundary.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/icu/codecvt.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/icu/collator.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/icu/conversion.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/icu/date_time.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/icu/formatter.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/icu/icu_backend.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/icu/numeric.o
darwin.compile.c++ bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/icu/time_zone.o
darwin.archive bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/libboost_locale.a
/usr/bin/libtool: warning same member name (codecvt.o) in output file used for input files: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link- static/threading-multi/std/codecvt.o and: bin.v2/libs/locale/build/darwin- 4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/posix/codecvt.o (due to use of basename, truncation, blank padding or duplicate input files)
/usr/bin/libtool: warning same member name (codecvt.o) in output file used for input files: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/posix/codecvt.o and: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/icu/codecvt.o (due to use of basename, truncation, blank padding or duplicate input files)
/usr/bin/libtool: warning same member name (collate.o) in output file used for input files: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/std/collate.o and: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/posix/collate.o (due to use of basename, truncation, blank padding or duplicate input files)
/usr/bin/libtool: warning same member name (converter.o) in output file used for input files: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/std/converter.o and: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/posix/converter.o (due to use of basename, truncation, blank padding or duplicate input files)
/usr/bin/libtool: warning same member name (date_time.o) in output file used for input files: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/icu/date_time.o and: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/shared/date_time.o (due to use of basename, truncation, blank padding or duplicate input files)
/usr/bin/libtool: warning same member name (numeric.o) in output file used for input files: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/icu/numeric.o and: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/posix/numeric.o (due to use of basename, truncation, blank padding or duplicate input files)
/usr/bin/libtool: warning same member name (numeric.o) in output file used for input files: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/posix/numeric.o and: bin.v2/libs/locale/build/darwin-4.2.1/release/boost.locale.iconv-off/link-static/threading-multi/std/numeric.o (due to use of basename, truncation, blank padding or duplicate input files)
common.copy stage/lib/libboost_locale.a
...updated 25 targets...
Согласно https://svn.boost.org/trac/boost/ticket/6424, предупреждения можно игнорировать (или кто-нибудь знает лучше?) Я копирую собранные библиотеки из stage / libs в / usr / local / libs.
Так что, насколько я могу судить, он правильно построен против ICU. Мой тестовый код требует от меня ссылки на libiconv - я бы подумал, что в этом нет необходимости, поскольку я отключил значок в сборке?
Может ли кто-нибудь дать мне некоторое представление о том, что происходит / что я сделал неправильно, и почему я не получаю ожидаемое поведение как задокументированное - или хотя бы некоторые вещи, которые можно попробовать?
ура
Крис
1 ответ
Поэтому XCODE обрушился на меня (как это часто бывает), и как только я перезапустил его и пересоздал проект, он запрашивает библиотеки ICU и больше не нуждается в библиотеке iconv - то есть, как и ожидалось. Я собираюсь записать это на XCODE вуду, я думаю. Я оставлю вопрос, так как он, по крайней мере, расскажет, как создать языковой стандарт надстройки с помощью ICU на OSX.