Visual Studio 2010 の std::wstring::length が正しい値を返さなかった
激しくはまってしまったので覚書。
さて、std::wstring::length は本来であれば文字列の文字数を返します。
std::wstring(L"mado").length(); // => 4 std::wstring(L"ほむ").length(); // => 2
gcc と clang は問題なく文字数を返して来ました。
しかし、なぜか Visual Studio 2010 では文字数ではなくバイト数が返ってきました。
std::wstring(L"mado").length(); // => 4 std::wstring(L"ほむ").length(); // => 4
[原因]
これはソースファイルの文字コードが utf-8 になっていた為です。
Visual Studio 2010 では BOM なしの utf-8 ファイルには対応していません。