[C++] 306 FLTK : 文字列をユニコードに変換 漢字変換修正 UTF-16

[M1 Mac, Monterey 12.6.3, clang 13.0.0, FLTK 1.3.8, ChatGPT API(gpt-3.5-turbo), NO IDE]

前回の記事で漢字変換がおかしかった所を修正しました。

UTF-8のままではマルチバイト文字を1つのユニコードとして認識できないため、UTF-16に変換する必要があります。

wstring_convertクラスを使ってUTF-8からUTF-16に変換しています。

#include <iostream>
#include <string>
#include <codecvt>

void convertCB(Fl_Widget*, void*) {
    std::stringstream unicode;
    const char* chr = convertInput -> value();

    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
    std::wstring unicode_str = converter.from_bytes(chr);
    for (wchar_t c : unicode_str) {
        unicode << std::hex << std::uppercase << static_cast<int>(c) << " ";
    }

    browser->add((unicode.str()).c_str());
}