C言語にて libiconv を使って ISO-2022-JP と UTF-8 を変換する
の続きです。
ISO-2022-JP のファイルを書き出す
UTF-8 のファイルを1行ごとに読み込み、
ISO-2022-JP に変換して、
のファイルに書き出す。
FILE *fp; fp = fopen( "utf8.txt", "r"); FILE *out; fp = fopen( "iso2022jp.txt", "w"); const size_t LINE_SIZE = 256; char line[LINE_SIZE] = {'\0'}; char text[CONV_BUFSIZE]; while ( fgets(line, LINE_SIZE, fp) != NULL ) { utf8_to_iso2022jp( line, strlen(line), (char *)text, CONV_BUFSIZE ); puts( text, out ); } fclose(fp);
C++ にて、ISO-2022-JP のファイルを書き出す
fstream#getline を使うときは、注意が必要です。
fgets は、改行コードも含めて読み込みます。
getlineは、改行コード('\n')は読み込まず、末尾に文字列終端コード('\0')が付加される。
ファイルを書き出すときに、改行コードを付加する。
改行コードはエスケープシーケンスも必要です。
0x1B, 0x28 , 0x42、0x0A の4文字。
ifstream ifs; ofstream ofs; ifs.open( "utf8.txt", std::ios::in); ofs.open( "iso2022.txt", std::ios::out ); string line; char text[CONV_BUFSIZE]; const char ISO2022JP_LF[] = { 0x1B, 0x28, 0x42, 0x0A, 0x00 }; while( getline(ifs, line) ) { utf8_to_iso2022jp( line.c_str(), line.length(), text, CONV_BUFSIZE ); ofs << text << ISO2022JP_LF; } ifs.close(); ofs.flush(); ofs.close();
Github にコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/libiconv