Last Update: Mar.21,2001

C Source Library

「Borland C++ 5.5」でコンパイル出来ます。

■ 数値文字参照のHTMLに変換

/*
 *  ncr.c : 数値文字参照のHTMLに変換
 *
 *  Copyright (c) 2000, 2001 AOK. 
 *
 *  2001.03.21 - 初版
 *
 *  【使い方】ncr 入力ファイル名 出力ファイル名
 *
 *  数値文字参照( Numeric Character References。略してNCR )
 *  は非ASCII文字をASCII文字で表すというHTML文書で用いられる
 *  エスケープ法。
 */

/* --- 変換後 -------------------------
<html>
<body>
<p>&#12371;&#12435;&#12394;&#24863;&#12376;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&#12450;&#12452;&#12454;&#12456;&#12458;</p>
<p>&#21322;&#35282;&#12459;&#12490;&#12399; &#65418;&#65438;&#65419;&#65438;&#65420;&#65438;&#65421;&#65438;&#65422;&#65438;</p>
</body>
</html>
 -------------------------------------- */

#include <windows.h>
#include <stdio.h>
#include <mbstring.h> 
#include <mbctype.h> 

int main(int argc, char *argv[])
{
    FILE *fpi, *fpo;
    char buf[2];
    WORD wc;
    int i, c, type = _MBC_SINGLE;
    
    if (argc > 1)
        fpi = fopen(argv[1], "rt");
    else /* エラー */
        return 1;
        
    if (argc > 2)
        fpo = fopen(argv[2], "wt");
    else /* エラー */
        return 1;
    
    while ((c = getc(fpi)) != EOF)
    {
        type = _mbbtype(c, type);
        switch (type)
        {
        case _MBC_LEAD:
            buf[0] = (char)c;
            break;
        case _MBC_TRAIL:
            buf[1] = (char)c;
            MultiByteToWideChar(932, 0, buf, 2, &wc, 1);
            fprintf(fpo, "&#%u;", wc);
            break;
        default:
            if (_ismbbkana(c))
            {
                buf[0] = (char)c;
                MultiByteToWideChar(932, 0, buf, 1, &wc, 1);
                fprintf(fpo, "&#%u;", wc);      
            }
            else
                fputc(c, fpo);
            break;
        }
    }   
    fclose(fpi);
    fclose(fpo);
        
    return 0;
}