回答編集履歴

1

追記

2017/05/02 03:33

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -39,3 +39,61 @@
39
39
  先週、この辺の問題について記事を書きました。[文字コードとVisual C++の悩み](http://theolizer.com/cpp-school1/cpp-school1-18/)
40
40
 
41
41
  もし、良かったら参考にして下さい。
42
+
43
+
44
+
45
+ ---
46
+
47
+ 【追記】
48
+
49
+ 気になるので、wifstreamの動きをみてみました。
50
+
51
+ 下記プログラムでUTF-16LEファイルを読ませると、wstringの1文字にファイル上の1バイトが読み出されていました。MinGW、および、ubuntu上のg++でも同様でした。
52
+
53
+ 何も指定しない場合は、テキスト・ファイルがASCIIでエンコードされていると解釈して読み取る仕様のようです。
54
+
55
+
56
+
57
+ ```C++
58
+
59
+ #include <fstream>
60
+
61
+ #include <iostream>
62
+
63
+ #include <string>
64
+
65
+ #include <iomanip>
66
+
67
+ using namespace std;
68
+
69
+
70
+
71
+ int main()
72
+
73
+ {
74
+
75
+ setlocale(LC_ALL, "");
76
+
77
+ wifstream ifs("test3.txt");
78
+
79
+ wstring str((istreambuf_iterator<wchar_t>(ifs)), istreambuf_iterator<wchar_t>());
80
+
81
+ wcout << str << endl;
82
+
83
+
84
+
85
+ wcout << endl << str.size() << endl;
86
+
87
+ for (auto i : str)
88
+
89
+ wcout << hex << (int)i << "\n";
90
+
91
+
92
+
93
+ return 0;
94
+
95
+ }
96
+
97
+ ```
98
+
99
+