wstring_convert Sınıfı
Giriş
Bu sınıf UTF-16 string'i UTF-8, MBCS gibi kodeklere çevirmek veya bu kodeklerden UTF-16 string oluşturmak için kullanılır.
from_bytes metodu
Örnek - UTF-8 to UTF-16
Şöyle yaparız. std::u16string tipi döner.
std::u32string tipi döner.
Örnek - UTF-16 to UTF-8
Şöyle yaparız.
MBCS -> UTF-16 çevrimi için şöyle yaparız
Örnek
UTF-16 -> MBCS çevrimi için şöyle yaparız
Bir başka örnekte 4 byte'lık tek bir unicode karakterini std::string'e şöyle çeviriyoruz.
mbstowcs_s
mbstowcs_s yazısına taşıdım.
wcstombs_s metodu
wcstombs_s yazısına taşıdım.
Boost
Giriş
Bu sınıf UTF-16 string'i UTF-8, MBCS gibi kodeklere çevirmek veya bu kodeklerden UTF-16 string oluşturmak için kullanılır.
from_bytes metodu
Örnek - UTF-8 to UTF-16
Şöyle yaparız. std::u16string tipi döner.
std::string source;
...
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t> convert;
std::u16string dest = convert.from_bytes(source);
Örnek - UTF-8 to UTF-32std::u32string tipi döner.
Örnek - UTF-16 to UTF-8
Şöyle yaparız.
std::u16string source;
...
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t> convert;
std::string dest = convert.to_bytes(source);
Örnek - MBCS to UTF-16 MBCS -> UTF-16 çevrimi için şöyle yaparız
std::wstring_convert<std::codecvt<wchar_t,char,std::mbstate_t>> converter;
std::wstring outputUtf16 = converter.from(inputMBCS);
to_bytes metoduÖrnek
UTF-16 -> MBCS çevrimi için şöyle yaparız
std::wstring_convert<std::codecvt<wchar_t,char,std::mbstate_t>> converter;
std::wstring outputUtf16 = converter.to_bytes (inputUTF16);
Örnek
std::wstring'i std::string'e çevirir. Elimizde bir wstring olsun.std::wstring wStr = ...;
Bu string'i UTF-8 olarak çevirip std::string'e şöyle ekleriz.std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::string wStrAsStr = converter.to_bytes(wStr);
std::string result = wStrAsStr + str;
ÖrnekBir başka örnekte 4 byte'lık tek bir unicode karakterini std::string'e şöyle çeviriyoruz.
#include <codecvt>
#include <locale>
#include <string>
#include <cassert>
int main() {
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> convert;
std::string utf8 = convert.to_bytes(0x5e9);
assert(utf8.length() == 2);
assert(utf8[0] == '\xD7');
assert(utf8[1] == '\xA9');
}
Windowsmbstowcs_s
mbstowcs_s yazısına taşıdım.
wcstombs_s metodu
wcstombs_s yazısına taşıdım.
Boost
Eğer C++11 kullanmıyorsak boost ile aynı şeyleri şöyle yaparız.
to_bytes benzeri
Tek bir unicode karakteri std::string'e şöyle çeviririz.
Şöyle yaparız.
to_bytes benzeri
Tek bir unicode karakteri std::string'e şöyle çeviririz.
#include <boost/locale.hpp>
int main() {
unsigned int point = 0x5e9;
std::string utf8 = boost::locale::conv::utf_to_utf<char>(&point, &point + 1);
assert(utf8.length() == 2);
assert(utf8[0] == '\xD7');
assert(utf8[1] == '\xA9');
}
from_bytes benzeriŞöyle yaparız.
using namespace boost::locale;
//Convert UTF-8 string str to UTF-16
u16string utf16_str = conv::utf_to_utf<char16_t>(str);
//NFD normalise
locale utf16_locale = generator().generate("en_US.UTF-16");
u16string normalised = normalize(utf16_str, norm_nfd, utf16_locale);
Hiç yorum yok:
Yorum Gönder