ソースコードのマルチバイト文字がUTF-8だと、VCでコンパイルできないので作成。
#include <stdio.h> #define NATIVE(c) ((~(c) & 0x80) == 0x80) #define UTF8_2BYTES(c) ((~(c) & 0x20) == 0x20) #define UTF8_3BYTES(c) ((~(c) & 0x10) == 0x10) #define UTF8_4BYTES(c) ((~(c) & 0x08) == 0x08) #define UTF8_5BYTES(c) ((~(c) & 0x04) == 0x04) #define UTF8_6BYTES(c) ((~(c) & 0x02) == 0x02) #define UTF8_7BYTES(c) ((~(c) & 0x01) == 0x01) static void puts_utf8(int c, FILE *fin, FILE *fout) { int n; n = UTF8_2BYTES(c) ? 2 : UTF8_3BYTES(c) ? 3 : UTF8_4BYTES(c) ? 4 : UTF8_5BYTES(c) ? 5 : UTF8_6BYTES(c) ? 6 : UTF8_7BYTES(c) ? 7 : 0; fprintf(fout, "\\x%x", c); for (; n > 1; n--) { c = fgetc(fin); fprintf(fout, "\\x%x", c); } } static void skip_bom(FILE *fin, FILE *fout) { int c; if ((c = fgetc(fin)) != 0xef) { ungetc(c, fin); return; } fputc(c, fout); c = fgetc(fin); fputc(c, fout); c = fgetc(fin); fputc(c, fout); } int main() { int c; skip_bom(stdin, stdout); while ((c = fgetc(stdin)) != EOF) { if (NATIVE(c)) { fputc(c, stdout); } else { puts_utf8(c, stdin, stdout); } } return 0; }