C言語にて ISO-2022-JP のファイルを書き出す

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