Windowsのfopenにもccsがあるが、類似機能であり、内容は結構違う。
fopen、_wfopen | Microsoft Learn
C言語のワイド文字入出力 — MSVCRTの場合 | 雑記帳
fopen.cで、
/* ヘッダファイルのインクルード */ #include <stdio.h> /* 標準入出力 */ #include <locale.h> /* ロケール */ /* main関数の定義 */ int main(void){ /* 変数の宣言 */ FILE *fp1; FILE *fp2; /* ファイルを開く. */ fp1 = fopen("test1.txt", "w,ccs=UNICODE"); /* fopenで"test1.txt"を開く. */ if (fp1 == NULL){ /* 失敗. */ perror("fopen 1"); return -1; } /* マルチバイト文字列で"あいうえお"を出力. */ fprintf(fp1, "%s", "あいうえお"); /* fprintfで"あいうえお"を出力. /* 閉じる. */ fclose(fp1); /* fcloseでfp1を閉じる. */ /* ファイルを開く. */ fp2 = fopen("test2.txt", "w, ccs=UNICODE"); /* fopenで"test2.txt"を開く. */ if (fp2 == NULL){ /* 失敗. */ perror("fopen 2"); return -2; } /* ワイド文字列でL"あいうえお"を出力. */ fwprintf(fp2, L"%s", L"あいうえお"); /* fwprintfでL"あいうえお"を出力. */ /* 閉じる. */ fclose(fp2); /* fcloseでfp2を閉じる. */ /* プログラムの終了 */ return 0; }
test1.txtでは、"w,ccs=UNICODE"というようにカンマ(',')と"css"の間を空けない。
test2.txtでは、"w, ccs=UNICODE"というようにカンマ(',')と"css"の間を空ける。(これはLinuxではできないらしい。)
UNICODEは、UTF-16LEのこと。
ロケールも特にセットしてない。
なんで?!
調べたら、
fprintfがUNICODE変換出力に対応してないらしい。
両方とも、fwprintfにした。
どっちもUNICODE出力できた。
(ロケールはセットしなくていいんかな・・・。)
Sample/c/fopen/ccs_Windows/src/fopen at master · bg1bgst333/Sample · GitHub