none
chcp 65001のときにwscanf_sしてwprintf_sすると文字化けする RRS feed

  • 質問

  • chcp 65001のときにwscanf_sしてwprintf_sすると日本語が文字化けします。

    // echo.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" #include <stdio.h> int main() { wchar_t str[1024]; wscanf_s(L"%s", str, 1024); wprintf_s(L"%s", str, 1024); return 0; }

    よろしくお願いいたします。

    2018年12月8日 11:59

回答

  • #include "stdafx.h"
    #include <stdio.h>
    #include <windows.h>
    
    int main()
    {
    	int nConsoleCP = GetConsoleCP();
    	int nConsoleOutputCP = GetConsoleOutputCP();
    
    	SetConsoleCP(932);
    	SetConsoleOutputCP(932);
    
    	wchar_t str[1024];
    	wscanf_s(L"%s", str, _countof(str));
    	wprintf_s(L"%s", str);
    
    	SetConsoleCP(nConsoleCP);
    	SetConsoleOutputCP(nConsoleOutputCP);
    
    	return 0;
    }


    上記のように chcp 932 に一時的に変更するのはどうでしょうか?下記のページによると chcp 65001 のまま正しく日本語入力するのは難しいようです。

    参考サイト: https://teratail.com/questions/141739

    • 回答としてマーク 0101100katen 2018年12月11日 13:29
    2018年12月8日 16:26

すべての返信

  • #include "stdafx.h"
    #include <stdio.h>
    #include <windows.h>
    
    int main()
    {
    	int nConsoleCP = GetConsoleCP();
    	int nConsoleOutputCP = GetConsoleOutputCP();
    
    	SetConsoleCP(932);
    	SetConsoleOutputCP(932);
    
    	wchar_t str[1024];
    	wscanf_s(L"%s", str, _countof(str));
    	wprintf_s(L"%s", str);
    
    	SetConsoleCP(nConsoleCP);
    	SetConsoleOutputCP(nConsoleOutputCP);
    
    	return 0;
    }


    上記のように chcp 932 に一時的に変更するのはどうでしょうか?下記のページによると chcp 65001 のまま正しく日本語入力するのは難しいようです。

    参考サイト: https://teratail.com/questions/141739

    • 回答としてマーク 0101100katen 2018年12月11日 13:29
    2018年12月8日 16:26
  • 「chcp 65001のときに」とのことですが、他のコードページであれば正しく動作するのでしょうか?

    # コードページ932であっても wprintf_s(L"こんにちは\n"); すら動作しないはずですが…?

    2018年12月9日 4:53
  • ご回答ありがとうございます。一時的にコードページを変更するのはアリだと思います。参考サイトのほうも拝見させていただきました。有益な情報をありがとうございます。
    2018年12月11日 13:29