teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

スペース→NULL

2018/05/24 01:46

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -39,7 +39,7 @@
39
39
  ```
40
40
 
41
41
  # 試したこと3
42
- WideCharToMultiByte を使用する方法として、以下の記事を参考にして作成しましたが、16バイト目に無駄なスペース(`0x00`)が含まれていました。
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
  ![](628bef731d3f2252b2804a6d8b8bcc40.png)

4

見やすくした

2018/05/24 01:46

投稿

退会済みユーザー
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
- - このプログラムの場合0バイトのout.txtが作成されました。
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
- - WideCharToMultiByte を使用する方法
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
  ![](628bef731d3f2252b2804a6d8b8bcc40.png)

3

情報追加

2018/05/24 01:44

投稿

退会済みユーザー
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
+ ![](628bef731d3f2252b2804a6d8b8bcc40.png)
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

情報追加

2018/05/24 01:43

投稿

退会済みユーザー
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

タグを追加

2018/05/24 01:34

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
File without changes