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

回答編集履歴

1

追記

2017/05/02 03:33

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -18,4 +18,32 @@
18
18
 
19
19
  ---
20
20
  先週、この辺の問題について記事を書きました。[文字コードとVisual C++の悩み](http://theolizer.com/cpp-school1/cpp-school1-18/)
21
- もし、良かったら参考にして下さい。
21
+ もし、良かったら参考にして下さい。
22
+
23
+ ---
24
+ 【追記】
25
+ 気になるので、wifstreamの動きをみてみました。
26
+ 下記プログラムでUTF-16LEファイルを読ませると、wstringの1文字にファイル上の1バイトが読み出されていました。MinGW、および、ubuntu上のg++でも同様でした。
27
+ 何も指定しない場合は、テキスト・ファイルがASCIIでエンコードされていると解釈して読み取る仕様のようです。
28
+
29
+ ```C++
30
+ #include <fstream>
31
+ #include <iostream>
32
+ #include <string>
33
+ #include <iomanip>
34
+ using namespace std;
35
+
36
+ int main()
37
+ {
38
+ setlocale(LC_ALL, "");
39
+ wifstream ifs("test3.txt");
40
+ wstring str((istreambuf_iterator<wchar_t>(ifs)), istreambuf_iterator<wchar_t>());
41
+ wcout << str << endl;
42
+
43
+ wcout << endl << str.size() << endl;
44
+ for (auto i : str)
45
+ wcout << hex << (int)i << "\n";
46
+
47
+ return 0;
48
+ }
49
+ ```