Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost.Locale: Default Encoding under Microsoft Windows

Boost , ,

Default Encoding under Microsoft Windows

Все современные операционные системы используют Unicode.

  • Семейство операционных систем Unix использует кодирование UTF-8 по умолчанию.
  • Microsoft Windows перешла на API Wide/UTF-16. Узкие кодировки были обесценены, а собственный API ОС стал так называемым «широким API»

В результате радикально разных подходов очень трудно писать портативные приложения, знакомые с Unicode.

Boost Locale полностью поддерживает как узкий, так и широкий API. Кодирование символов по умолчанию предполагается UTF-8 в Windows.

Так что если по умолчанию операционная система Locale является «English_USA.1252», то по умолчанию для Boost. Локальность в Windows будет «en_US.UTF-8».

Когда созданный локальный объект устанавливается глобально, тогда любые библиотеки, которые используют<std::codecvt>для преобразования между узким API и нативным широким API, будут обрабатывать UTF-8 правильно.

Хорошим примером такой библиотеки является Boost.Filesystem v3.

Например,

#include <boost/locale.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/fstream.hpp>
int main()
{
// Create and install global locale
std::locale::global(boost::locale::generator().generate(""));
// Make boost.filesystem use it
boost::filesystem::path::imbue(std::locale());
// Now Works perfectly fine with UTF-8!
boost::filesystem::ofstream hello("שלום.txt");
}

Однако такое поведение может нарушить существующее программное обеспечение, которое предполагает, что текущее кодирование представляет собой кодирование одним байтом, такое как кодовая страница 1252.

boost::locale::generatorкласс имеет свойствоuse_ansi_encoding(), что позволяет изменить поведение на унаследованное и выбрать кодовую страницу ANSI в качестве кодирования системы по умолчанию.

Таким образом, когда текущая локализация «English_USA.1252» и<use_ansi_encoding>включена, то по умолчанию локальной будет «en_US.windows-1252».

Note
winapi backend does not support ANSI encodings, thus UTF-8 encoding is always used for narrow characters.

Статья Boost.Locale: Default Encoding under Microsoft Windows раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:35:28/0.0053369998931885/1