回答編集履歴
3
回答の追記
answer
CHANGED
@@ -17,4 +17,15 @@
|
|
17
17
|
- fgetwsの入力コードページをsetlocale以外で変更する方法をご存じの方は、教えてください。
|
18
18
|
|
19
19
|
あと、このプログラムは、ほとんどのUTF-16はwchar_tが1個で1文字なので、たまたま動作しています。
|
20
|
-
サロゲートペア文字(wchar_tが2個で1文字)では上手くいかないと思います。
|
20
|
+
サロゲートペア文字(wchar_tが2個で1文字)では上手くいかないと思います。
|
21
|
+
|
22
|
+
(追記)
|
23
|
+
詳細は、melianさんの回答の通りですが、
|
24
|
+
```
|
25
|
+
#include <fcntl.h>
|
26
|
+
```
|
27
|
+
と
|
28
|
+
```
|
29
|
+
_setmode(_fileno(stdin), _O_U8TEXT);
|
30
|
+
```
|
31
|
+
の追加で、65001でも動作します。
|
2
回答の追記
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
以下の2環境で確認しました。
|
1
|
+
以下の2環境で確認しました。ソースはUTF-8で保存です。
|
2
2
|
|
3
3
|
|OS|コンパイラー|PowerShell|
|
4
4
|
|-|-|-|
|
1
回答の追記
answer
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
PowerShellのコードページが932(Shift_JIS)のときは、提示されたソースで正しく動作します。
|
9
9
|
65001(UTF-8)のときは、提示されたソース、`setlocale(LC_ALL, ".UTF-8");`に変更したソースの両方とも正しく動作しませんでした。
|
10
10
|
|
11
|
-
(65001に変更するときは`chcp 65001`、932に戻すときは`chcp 932`と打ちます。)
|
11
|
+
(65001に変更するときは`chcp 65001`、932に戻すときは`chcp 932`と打ちます。確認するときは`chcp`のみです)
|
12
12
|
|
13
13
|
おそらくですが、`fgetws`関数の動作が`OS標準のコードページ→UTF-16の変換`のみをサポートしていて、setlocaleが効いていないと思われます。
|
14
14
|
コメントの2人とも、LinuxではOS標準のコードページがUTF-8なので、setlocaleがそのままで`UTF-8→UTF-16の変換`に対応しています。
|