質問編集履歴
5
スペース→NULL
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -39,7 +39,7 @@ | |
| 39 39 | 
             
            ```
         | 
| 40 40 |  | 
| 41 41 | 
             
            # 試したこと3
         | 
| 42 | 
            -
            WideCharToMultiByte を使用する方法として、以下の記事を参考にして作成しましたが、16バイト目に無駄な | 
| 42 | 
            +
            WideCharToMultiByte を使用する方法として、以下の記事を参考にして作成しましたが、16バイト目に無駄なNULL(`0x00`)が含まれていました。
         | 
| 43 43 | 
             
            [http://nekko1119.hatenablog.com/entry/2017/01/02/054629](http://nekko1119.hatenablog.com/entry/2017/01/02/054629)
         | 
| 44 44 |  | 
| 45 45 | 
             
            
         | 
4
見やすくした
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -1,8 +1,8 @@ | |
| 1 1 | 
             
            # 質問
         | 
| 2 2 | 
             
            C++17でUTF-8(BOMなし)のファイルを出力したいです。
         | 
| 3 3 |  | 
| 4 | 
            -
            # 試したこと
         | 
| 4 | 
            +
            # 試したこと1
         | 
| 5 | 
            -
             | 
| 5 | 
            +
            このプログラムの場合0バイトのout.txtが作成されました。
         | 
| 6 6 | 
             
            ```cpp
         | 
| 7 7 | 
             
            #include <iostream>
         | 
| 8 8 | 
             
            #include <string>
         | 
| @@ -15,7 +15,8 @@ | |
| 15 15 | 
             
            }
         | 
| 16 16 | 
             
            ```
         | 
| 17 17 |  | 
| 18 | 
            +
            # 試したこと2
         | 
| 18 | 
            -
             | 
| 19 | 
            +
            このプログラムで問題なく出力できましたが警告が出ています。警告をなくしたいです。
         | 
| 19 20 |  | 
| 20 21 | 
             
            また、`#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING`または
         | 
| 21 22 | 
             
            `#define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS`すると警告は出ませんができれば他の方法で解決したいです。
         | 
| @@ -37,8 +38,8 @@ | |
| 37 38 | 
             
            }
         | 
| 38 39 | 
             
            ```
         | 
| 39 40 |  | 
| 40 | 
            -
             | 
| 41 | 
            +
            # 試したこと3
         | 
| 41 | 
            -
            以下の記事を参考にして作成しましたが、16バイト目に無駄なスペース(`0x00`)が含まれていました | 
| 42 | 
            +
            WideCharToMultiByte を使用する方法として、以下の記事を参考にして作成しましたが、16バイト目に無駄なスペース(`0x00`)が含まれていました。
         | 
| 42 43 | 
             
            [http://nekko1119.hatenablog.com/entry/2017/01/02/054629](http://nekko1119.hatenablog.com/entry/2017/01/02/054629)
         | 
| 43 44 |  | 
| 44 45 | 
             
            
         | 
3
情報追加
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -37,6 +37,40 @@ | |
| 37 37 | 
             
            }
         | 
| 38 38 | 
             
            ```
         | 
| 39 39 |  | 
| 40 | 
            +
            - WideCharToMultiByte を使用する方法
         | 
| 41 | 
            +
            以下の記事を参考にして作成しましたが、16バイト目に無駄なスペース(`0x00`)が含まれていました.
         | 
| 42 | 
            +
            [http://nekko1119.hatenablog.com/entry/2017/01/02/054629](http://nekko1119.hatenablog.com/entry/2017/01/02/054629)
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            
         | 
| 45 | 
            +
            ※out.txtがプログラムで作成したテキストファイル。out2.txtがテキストエディタを使いUTF-8(BOMなし)で「あいうえお」という文字列を書き込んだファイル。
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            ```cpp
         | 
| 48 | 
            +
            #include <Windows.h>
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            #include <iostream>
         | 
| 51 | 
            +
            #include <vector>
         | 
| 52 | 
            +
            #include <string>
         | 
| 53 | 
            +
            #include <fstream>
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            std::string wide_to_utf8_winapi(std::wstring const& src)
         | 
| 56 | 
            +
            {
         | 
| 57 | 
            +
              auto const dest_size = ::WideCharToMultiByte(CP_UTF8, 0U, src.data(), -1, nullptr, 0, nullptr, nullptr);
         | 
| 58 | 
            +
              std::vector<char> dest(dest_size, '\0');
         | 
| 59 | 
            +
              if (::WideCharToMultiByte(CP_UTF8, 0U, src.data(), -1, dest.data(), dest.size(), nullptr, nullptr) == 0) {
         | 
| 60 | 
            +
                throw std::system_error{ static_cast<int>(::GetLastError()), std::system_category() };
         | 
| 61 | 
            +
              }
         | 
| 62 | 
            +
              return std::string(dest.begin(), dest.end());
         | 
| 63 | 
            +
            }
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            int main() {
         | 
| 66 | 
            +
              std::ofstream ofs("out.txt");
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              ofs << wide_to_utf8_winapi(L"あいうえお") << std::endl;
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              ofs.close();
         | 
| 71 | 
            +
            }
         | 
| 72 | 
            +
            ```
         | 
| 73 | 
            +
             | 
| 40 74 | 
             
            # 環境
         | 
| 41 75 | 
             
            |||
         | 
| 42 76 | 
             
            |--|--|
         | 
2
情報追加
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -16,6 +16,9 @@ | |
| 16 16 | 
             
            ```
         | 
| 17 17 |  | 
| 18 18 | 
             
            - このプログラムで問題なく出力できましたが警告が出ています。警告をなくしたいです。
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            また、`#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING`または
         | 
| 21 | 
            +
            `#define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS`すると警告は出ませんができれば他の方法で解決したいです。
         | 
| 19 22 | 
             
            ```cpp
         | 
| 20 23 | 
             
            #include <iostream>
         | 
| 21 24 | 
             
            #include <vector>
         | 
1
タグを追加
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | 
            File without changes
         | 
