私が理解できない奇妙なユニコードに関する問題に遭遇しています。ユニコード変換の問題C++
基本的には、コマンドラインから手動で実行すると、さまざまな入力でmbtowcs()を正常に呼び出すコマンドラインアプリケーションがあります(http://www.cplusplus.com/reference/clibrary/cstdlib/mbstowcs /)は文字列を操作し、適切な出力を返します。
このアプリケーションがmonit経由で自動的に実行されるたびに、この関数は正しいバイト数を変換しなくなり、出力は基本的に文字化けし、ユニコードのエラーダイヤモンドに散在します。私は同じ入力についてこれをテストしました。
これは、ロケールやマシン(Ubuntu Server 11.04)の設定に関するものと思われます。私はsetlocale(LC_CTYPE、 "")を呼び出しています。私のスタートアップ機能でうまくいきました。
私のコードを正しく動作させるためには、どのシステム設定を変更する必要があるのですか?
更新:
setlocale(LC_CTYPE, "en_US.UTF-8");
に
setlocale(LC_CTYPE, "");
を変更するように見えるが、問題を解決している可能性があります。なぜこれが必要なのか、あるいはこれを避けるために私のシステム設定をどのように変更できるのか、誰でも情報を提供できますか?
なぜ最初にsetlocale()を呼び出しますか? UTF-8は、Linux上のすべての文字列のデフォルトエンコーディングとして広く受け入れられています。 –