2017-02 << 2017-03 >> 2017-04

2017-03-28 (火)

C++11で文字コードどう扱うの調べたりしていた.

std::locale sjis(".932", std::locale::ctype);
typedef std::codecvt<wchar_t, char, std::mbstate_t> mbCvt;
const mbCvt& cvt = std::use_facet<mbCvt>(sjis);
std::wstring_convert<mbCvt, wchar_t> sjisConverter(&cvt);
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> utf8Converter;


std::wstring ws = sjisConverter.from_bytes("sjis string");
std::string utf8 = utf8Converter.to_bytes( ws );

std::wstring ws2 = utf8Converter.from_bytes("utf8string");
std::string sjis = sjisConverter.to_bytes( ws2 );

これで,wstring と sjis文字列とutf8文字列の相互変換ができるっぽい.mbstowcs系の関数は使いたくないなと思ってたので良かった.

メタセコイアのプラグインのために,久しぶりにWindowsで実行されるコード書いたけど,ワイド文字(UTF-16)とマルチバイト文字(CP932)とUTF-8が入り乱れててひどいな.

ほとんどの関数はwchar_tなのに,オブジェクト名とかはマルチバイト文字返すのが残念.

2017-02 << 2017-03 >> 2017-04