3 に答える
_wsystem
幅の広い弦に使用します。
これはVC++ですか?
その場合、ファイルは BOM なしで UTF-8 を使用しているように見えます。これは、VC++ がソース文字セットと実行文字セットが同じであると想定するため、文字列リテラル「echo Ιλιάδα」を生成するときにエンコード変換を行わないことを意味します。UTF-8 データを直接出力するだけです。system("echo Ιλιάδα");
これは、システムのロケール エンコーディングであるかのように表示される UTF-8 文字列がどこにあるかをコンパイラが認識していることを意味します。
デフォルトでは、system()
関数はシステムのロケール エンコーディングで文字列を受け取ります。コンソール出力のコードページはsystem()
の操作に影響を与えないため、上記の文字列はまさにそれが表示するものでもあります。
BOM なしで UTF-8 を使用しているため、幅の広い文字列では問題が発生します。ワイド文字列を生成するには、ソース文字セットをワイド実行文字セットに正しく変換する必要があります。BOM なしで UTF-8 を使用している場合、VC++ は正しいソース エンコーディングを認識しないため、この変換を正しく行うことができません。