sutfcpplib
От: Videoman Россия https://hts.tv/
Дата: 28.07.22 21:46
Оценка: 59 (6)
Устал я ждать от комитета, когда он наконец соизволит добавить простейшую поддержку Unicode. Казалось бы, много не надо, дайте хотя бы какую-нибудь to_u8string(const std::basic_string<>& str) — преобразование из одной кодировки Юникод в другую, но нет. Старую поддержку задеприкейтим, не объясняя что случилось, а нового ничего не дадим. Вот уже и 23-й с++ на подходе, но и там что-то ничего нового про Unicode не слышно. В общем пришлось городить свой велосипед. Библиотека header-only, стандарт С++17 и выше, кроссплатформенная, совместима с MSVС, GCC и CLang. Также поддерживается итерация по всяким код-поинтам и код-юнитам, короче минимально необходимый функционал есть. Очень надеюсь что кому-то библиотека покажется полезной, а может быть кто-то давно искал что-то подобное.
sutfcpplib (Simple UTF library for C++) — выложил на GitHub пот MIT лицензией.
Отредактировано 28.07.2022 21:50 Videoman . Предыдущая версия .
Re: sutfcpplib
От: Maniacal Россия  
Дата: 29.07.22 08:38
Оценка: -1
Здравствуйте, Videoman, Вы писали:

V>Устал я ждать от комитета, когда он наконец соизволит добавить простейшую поддержку Unicode.


Конвертация wchar_t* в utf8 и обратно.
inline std::string ToStr(const std::wstring& wstr)
{
    static std::locale loc("");
    static auto &facet = std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(loc);
    return std::wstring_convert<std::remove_reference<decltype(facet)>::type, wchar_t>(&facet).to_bytes(wstr);
}

inline std::wstring ToWstr(const std::string& str)
{
    static std::locale loc("");
    static auto &facet = std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(loc);
    return std::wstring_convert<std::remove_reference<decltype(facet)>::type, wchar_t>(&facet).from_bytes(str);
}
Re[2]: sutfcpplib
От: Videoman Россия https://hts.tv/
Дата: 29.07.22 08:43
Оценка:
Здравствуйте, Maniacal, Вы писали:

M>...


Так про это безобразие собственно и разговор: std::wstring_convert.

deprecated in C++17

И весь альтернативный API тожe.
Re: sutfcpplib
От: ArtDenis Россия  
Дата: 29.07.22 09:42
Оценка:
Здравствуйте, Videoman, Вы писали:

V>sutfcpplib (Simple UTF library for C++) — выложил на GitHub пот MIT лицензией.


Есть ещё utfcpp: https://github.com/nemtrif/utfcpp Тоже header only
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: sutfcpplib
От: DiZSl  
Дата: 29.08.22 19:07
Оценка:
Чем плох nowide из boost-а?
https://www.boost.org/doc/libs/1_80_0/libs/nowide/doc/html/index.html
Re[2]: sutfcpplib
От: Videoman Россия https://hts.tv/
Дата: 29.08.22 20:07
Оценка:
Здравствуйте, DiZSl, Вы писали:

DZS>Чем плох nowide из boost-а?

DZS>https://www.boost.org/doc/libs/1_80_0/libs/nowide/doc/html/index.html

Как я понял, это обертка, которая позволяет исправить POSIX API, что бы его без проблем, кроссплатформенно, можно было использовать c UFT-8/UTF-16. Зависимость от Boost.

sutfcpplib- легкая, header-only библиотека для преобразования из/в UFT-8/UTF-16/UTF-32. API операционной системы в ней не используется.

Т.е. ответ: это две абсолютно разные библиотеки, для абсолютно разных целей.
Re[3]: sutfcpplib
От: σ  
Дата: 30.08.22 08:41
Оценка: +1
DZS>>Чем плох nowide из boost-а?
DZS>>https://www.boost.org/doc/libs/1_80_0/libs/nowide/doc/html/index.html

V>Как я понял, это обертка, которая позволяет исправить POSIX API


Нет. Исправляет реализацию стандартных сишных функций на некоторых маргинальных ОС

V> Зависимость от Boost.


http://cppcms.com/files/nowide/html/#standalone_version
Re: sutfcpplib
От: σ  
Дата: 30.08.22 08:47
Оценка:
V>Старую поддержку задеприкейтим, не объясняя что случилось
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0618r0.html#2.0

Олсо
V>а нового ничего не дадим.
разницу между "задепрекейтили" и "удалили" понимаешь?
Отредактировано 30.08.2022 8:50 σ . Предыдущая версия .
Re[2]: sutfcpplib
От: Videoman Россия https://hts.tv/
Дата: 30.08.22 10:07
Оценка:
Здравствуйте, σ, Вы писали:

σ>разницу между "задепрекейтили" и "удалили" понимаешь?


Понимаешь — API устарел и не рекомендуется для использования, т.к. спокойненько может быть выпилен в будущем. Предпочитаю не пользоваться таким API.
Re: sutfcpplib
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 06.09.22 08:47
Оценка:
Здравствуйте, Videoman, Вы писали:

V>В общем пришлось городить свой велосипед. Библиотека header-only, стандарт С++17 и выше, кроссплатформенная, совместима с MSVС, GCC и CLang


simdutf — это не аналог?
Re[2]: sutfcpplib
От: Videoman Россия https://hts.tv/
Дата: 06.09.22 21:13
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>simdutf — это не аналог?


Аналог. Но собственно у меня изначально и была проблема не в том, что не существует библиотек, а в том, что таких огромных библиотек море и их нужно собирать. Если нужно комплексное, самое быстрое решение, для готового проекта, то нет проблем. Я-то сам пишу библиотеки, которые должны быть header-only, где не всегда понятно какая система сборки, где активно используются шаблоны, при этом мне же потом все это и поддерживать. Мне такое не подходит. В С++ предпочитаю не использовать стиль Си: transform_XXX_to_YYY_with_ZZZ_.... — и таких 100 методов. Во-первых такой подход хреново работает с шаблонами, т.к. опирается на имена методов, а не на типы. Во-вторых плохо сочетается с С++, т.к. кроме сырых указателей существуют еще итераторы и другие контейнеры. В-третьих такое очень трудно поддерживать.
Отредактировано 06.09.2022 21:14 Videoman . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.