[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());
}

[C++] 305 FLTK : 文字列をユニコードに変換 

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

自製アプリに文字列をユニコードに変換する機能を実装しました。

下図のようにファイル名に改行コードLFが混入していることが分かります。

漢字の変換がおかしいですが、後日修正します。

void convertCB(Fl_Widget*, void*) {
    std::stringstream unicode;
    const char* chr = convertInput -> value();
    for (int i = 0; chr[i] != '\0'; i++) {
        unicode << "\\u" << std::hex << std::setw(4) << std::setfill('0') << (int)chr[i];
    }

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

[MacOS] .DS_Store関連の検証 Makefile動作不調

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

Spotlightのためにディレクトリ情報をまとめた.DS_StoreがMakeコマンドを妨害することがあります。

対象ディレクトリにある.DS_Storeを消してしまえば済む話ですが、それではSpotlightが正常に機能しなくなるのでMakeコマンド実行時にこのファイルを無視できないか方法を探っています。ちなみにGitではgit ignoreを使って無視できます。

.DS_StoreはFinderで隠しファイルを見えるようにしても隠れたままですから、取り扱いがやっかいです。

取りあえず消してしまった.DS_Storeを仮置きするために他のディレクトリからコピーする方法をメモしておきます。

全てのディレクトリに.DS_Storeは存在しているはずなので、最初にfindコマンドで所在を確認する必要は特にありません。

# .DS_Storeファイルの所在を確認
$ find "/ChatGPT" -name ".DS_Store"
# 出力
/ChatGPT/.DS_Store
/ChatGPT/.git/.DS_Store
/ChatGPT/bin/.DS_Store
/ChatGPT/etc/.DS_Store
/ChatGPT/images/.DS_Store
/ChatGPT/include/.DS_Store
/ChatGPT/obj/.DS_Store

# 適当な.DS_Storeファイルを対象ディレクトリへコピー
$ cp /ChatGPT/obj/.DS_Store /ChatGPT/src

# コピーできているか確認
$ find "/ChatGPT" -name ".DS_Store"
# 出力
/ChatGPT/.DS_Store
/ChatGPT/.git/.DS_Store
/ChatGPT/bin/.DS_Store
/ChatGPT/etc/.DS_Store
/ChatGPT/images/.DS_Store
/ChatGPT/include/.DS_Store
/ChatGPT/obj/.DS_Store
/ChatGPT/src/.DS_Store