カテゴリー別

お絵描き、デザイン

写真、動画関連ソフト

アメーバピグ専用ソフト

ホームページ関連

画像処理

スキャナー用

SEO 関連

お楽しみ

その他

過去ログ

2015年11月12日(木)

日本語版以外の Windows では、std::locale("Japanese", std::locale::ctype) で落ちるっぽい

「っぽい」情報を書くのもどうかと思いますが、
検証するのも面倒なので適当に書きます。話半分で読んでね。

外国の方からのご報告で、プログラムの

std::wcout.imbue(std::locale("Japanese", std::locale::ctype));
std::wcerr.imbue(std::locale("Japanese", std::locale::ctype));

を実行すると落ちることがわかりました。
ちなみに、 スキャナートリマー の不具合です。

この部分で起きる例外をキャッチしていなかったので、
たぶん、例外が放出されているんだと思います。

先に結論を書くと、

std::wcout.imbue(std::locale("", std::locale::ctype));
std::wcerr.imbue(std::locale("", std::locale::ctype));

に修正すると落ちなくなります。

一応、何をやっているコードか説明すると、
wcout に日本語を出力できるようにするコードです。

もともとのコードは、"Japanese" を指定しているので、
強制的に日本語コードが使用されますが、修正後の ""
では、環境での「ネイティブロケール」が使用されます。

「ネイティブロケール」が何を意味するか正確にはわかりませんが、
日本語版 Windows で、「日本語」が表示言語なら「日本語」ですよね。

きっと、ドイツ語 Windows ならドイツ語になるでしょう。
ま、「日本語」と「英語」しか出力しないから今回は関係ないですけど。

stl のバージョンや製造元にもよると思うけど、
自分が使っているやつだと落ちました。案外、OS に依存してるのね。

ま、詳しくはかかないけど、vc 付属の普通のやつです。
国際化してる人は注意してね。 ではでは。

・・・

さすがに、「日本語版以外」では日本語を含まないよね。
3 人以上とかでは、3 含むんだけど・・・。美しくないなぁ。

スキャナートリマー
スキャナートリマー ダウンロード
ご意見・ご要望など


コメント
コメントする