Biblioteka do stringów Unicode UTF8

Biblioteka do stringów Unicode UTF8
bajos
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: UwUdź
  • Postów: 267
0

Witajcie,

Potrzebna mi biblioteka do stringów obsługująca Unicode i trzymająca dane w UTF8. Chodzi o to, żeby można było iterować po znakach, a nie po bajtach, były funkcje typu split itd., możliwość skonwertowania endianness i innego UTF. Używam teraz QString, ale wewnętrznie trzyma on w UTF16 co mi na Linuxie nie pasuję i ogólnie całość tekstów w programie chcę mieć na UTF8. Jest coś takiego?

carlosmay
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Pabianice
bajos
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: UwUdź
  • Postów: 267
0

@carlosmay, co z tego jak wtedy przestaje być QStringiem? Takie konwertowanie też zajmuje trochę czasu. Wewnętrznie QString trzyma w endianness procesora i UTF16 i koniec, tego nie da się zmienić AFAIK.

carlosmay
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Pabianice
0

Mało znam QT i nie wiem czy to pomoże.

Korzystam na windze z std::string i std::wstring jednocześnie.
Często przy zapisie do pliku w trybie std::ios::binary konwertuje z widen na narrow, bo są problemy z mieszaniem stringów i liczb.
Do pliku zapisuję char, a później odczytuję z pliku i konwertuję z powrotem do std::wstring
std::wstring_convert <locale>
<codecvt>

Kopiuj
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>

auto main() -> int
{
	std::wcout.imbue(std::locale("Polish_poland.852")); // ustawienie polskiej strony kodowej dla std::wcout (VS2015)
	std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;

	std::wstring wstr{ L"ąęć" };
	std::string str = converter.to_bytes(wstr);
	std::wstring wstr2 = converter.from_bytes(str);

	std::wcout << wstr << L'\n';
	std::cout << str << '\n';
	std::wcout << wstr2 << L'\n';

} 
Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

UTF-8 nie jest kodowaniem do wewnętrzego użytku w programie. Zaleca się używanie właśnie UTF-16 do przetwarzania tekstu, i konwersję do UTF-8 przed wyświetleniem albo zapisem do pliku.

W ten sposób oszczędzisz sobie roboty i nerwów.

bajos
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: UwUdź
  • Postów: 267
0

@Azarien, w moim przypadku lepszym wyborem będzie UTF8 wewnętrznie. Będę głównie trzymał nazwy meshy, modeli, ścieżki względne gdzie prawie zawsze nie wyjdę poza zakres ASCII (angielskie nazwy). Chodzi tylko o to, że może ktoś zapragnąć użyć polskiej nazwy. Tutaj widzę tylko przewagę UTF8 nad UTF16. Po co mam więc marnować miejsce na UTF16?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.