RtfconvEx RtfconvStringEx RtfconvCharEx IsRtfconvValidCodePage GetRtfconvLastError AbortRtfconv GetDllVersion |
RTFCONVEXINFO RTFFONTINFO RTFFONTEXINFO RTFLANGIDINFO |
使用例 1   
使用例 2   
使用例 3   
使用例 4   
使用例 5   
使用例 6    使用例 7    使用例 8    使用例 9    使用例 10    |
1. 異体字の変換 2. 変換テーブル 3. 日本語 EUC の入出力 4. 中国語繁体字 HKSCS と EUC-TW の入出力 5. JIS2004 の入出力 |
int WINAPI RtfconvEx ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO * pRtfconvExInfo ) ;
LPCTSTR pSrcFileName 入力ファイルのファイル名を指定 LPCTSTR pSrcFileName 出力ファイルのファイル名を指定入力ファイル名と出力ファイル名は、絶対パス名でも相対パス名でもかまいません。UNC でもかまいません。ファイル名に NULL を指定すると 標準入出力(stdin または stdout)を指定したものとみなします。入力ファイルと出力ファイルに同一のファイルを指定した場合の動作は未定義です。入力ファイルのサイズに制限はありません(ディスクのファイルシステムの制限に依存します)。
int nSrcCodePage 入力ファイルのコードページ int nDstCodePage 出力ファイルのコードページ入出力ファイルのコードページを指定します。コードページの番号は Windows のシステムで使われているものと同一ですが、rtfconv.h で定義されているコードページの名前を使用すると便利です。コードページに 0 を指定すると、リッチテキストフォーマットとみなします。入力と出力に同じコードページを指定することもできます。ただし入出力ともにリッチテキストファイルを指定することはできません。
const RTFCONVEXINFO * pRtfconvExInfo 変換オプション構造体 RTFCONVEXINFO のアドレスを指定します。この構造体により、変換を制御するための各種オプションを指定することができます。必要でなければ NULL を指定します。
RTFCONV_SUCCESS 変換が成功した |
RTFCONV_ERROR_UNKNOWN 原因不明のエラーが発生した |
RTFCONV_ERROR_READ 読み込みに失敗した |
RTFCONV_ERROR_WRITE 書き込みに失敗した |
RTFCONV_ERROR_RTFFORMAT リッチテキストフォーマットの形式にエラーがあった |
RTFCONV_ERROR_RTFBRACE リッチテキストフォーマットのカッコが対応していない |
RTFCONV_ERROR_MEMORY 必要なメモリーが確保できなかった |
RTFCONV_ERROR_CODEPAGE 無効なコードページを指定した |
RTFCONV_ERROR_ABORTED 変換中に AbortRtfconv により中断された |
RTFCONV_ERROR_PARAM 引き数の指定に誤りがあった |
intptr_t WINAPI RtfconvStringEx ( const void * pSrcBuffer, void * pDstBuffer, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO * pRtfconvExInfo, size_t nMaxLen ) ;
const void * pSrcBuffer 変換する文字列のポインタを指定 void * pDstBuffer 出力するバッファのポインタを指定
int nSrcCodePage 元の文字列のコードページ int nDstCodePage 出力する文字列のコードページ const RTFCONVEXINFO * pRtfconvExInfo 変換オプション
size_t nMaxLen 出力するバッファの最大サイズ(バイト)を指定引き数 nSrcCodePage, nDstCodePage, pRtfconvExInfo は、RtfconvEx で使われるものと同じなので、そちらを参照してください。
int WINAPI RtfconvCharEx ( int C, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO * pRtfconvExInfo ) ;
int C 変換する文字を指定
int nSrcCodePage 元の文字列のコードページ int nDstCodePage 出力する文字列のコードページ const RTFCONVEXINFO * pRtfconvExInfo 変換オプション引き数 nSrcCodePage, nDstCodePage, pRtfconvExInfo は、RtfconvEx で使われるものと同じなので、そちらを参照してください。ただし、nSrcCodePage, およびnDstCodePage に 0 を指定することはできません。(つまりリッチテキスト形式を指定することはできません。)モードのあるコードページ(JIS や HZ など)や UTF-8を指定することもできません。
int WINAPI IsRtfconvValidCodePage ( int nCodePage ) ;
int WINAPI GetRtfconvLastError ( void ) ;
RTFCONV_SUCCESS 変換が成功した |
RTFCONV_ERROR_UNKNOWN 原因不明のエラーが発生した |
RTFCONV_ERROR_READ 読み込みに失敗した |
RTFCONV_ERROR_WRITE 書き込みに失敗した |
RTFCONV_ERROR_RTFFORMAT リッチテキストフォーマットの形式にエラーがあった |
RTFCONV_ERROR_RTFBRACE リッチテキストフォーマットのカッコが対応していない |
RTFCONV_ERROR_MEMORY 必要なメモリーが確保できなかった |
RTFCONV_ERROR_CODEPAGE 無効なコードページを指定した |
RTFCONV_ERROR_ABORTED 変換中に AbortRtfconv により中断された |
RTFCONV_ERROR_PARAM 引き数の指定に誤りがあった |
int WINAPI AbortRtfconv ( void ) ;
int WINAPI GetDllVersion ( void ) ;
typedef struct { size_t cbSize ; unsigned long dwConversionMode ; unsigned long dwAdditionalMode ; const char * pUnmappableCharFormat ; int nDefaultCjkCodePage ; int nFontSize ; const RTFFONTINFO * pFontInfo ; const RTFFONTEXINFO * pFontExInfo ; size_t nNumberOfFontExInfo ; const RTFLANGIDINFO * pLangIdInfo ; size_t nNumberOfLangIdInfo ; const void * pReserved ; } RTFCONVEXINFO ;
CONVMODE_PEEKMESSAGE 変換中にメッセージループをまわす。 |
CONVMODE_OUTPUT_CODE_NUMBER テキストファイル出力時に、変換できない文字は Unicode の番号を[UNICODE:hhh] の形式で出力します(この出力形式は pUnmappableCharFormat で変更できます)。デフォルト(これを指定しない)では、変換できない文字は、半角文字なら ? に、全角文字なら ?? に変換されます。 |
CONVMODE_OUTPUT_CODE_NUMBER_HTML テキストファイル出力時に、変換できない文字は Unicode の番号を hhhh; の形式で出力します。デフォルト(これを指定しない)では、変換できない文字は、半角文字なら ? に、全角文字なら ?? に変換されます。 |
CONVMODE_OUTPUT_NUMBER_SURROGATE テキストファイル出力時に、CONVMODE_OUTPUT_CODE_NUMBER または CONVMODE_OUTPUT_CODE_NUMBER_HTML を指定して、変換できない文字を数値で出力するようにしたとき、U+10000 以上の文字をサロゲートペアで出力します。 |
CONVMODE_INPUT_CODE_NUMBER_HTML テキストファイル入力時に、ファイル中の HTML形式の文字表記(nnn;、hhhh;、 など)を Unicode のコード番号であると認識します。 |
CONVMODE_NO_VARIANT_KANJI テキストファイル出力時に、漢字の異体字を検索しません。デフォルト(これを指定しない)では、異なる言語間での変換および Unicode から各言語への変換で、異体字を検索してより適切な漢字を出力します。たとえば中国語→日本語の変換で、中国語簡体字は日本の漢字に(該当する文字があれば)変換して出力するようにします。CONVMODE_NO_VARIANT_KANJI を指定すると、この異体字変換が行われません。このオプションは U+2E80 以上の文字に対して有効です。 |
CONVMODE_NO_VARIANT_EUROPEAN テキストファイル出力時に、ヨーロッパの文字の異体字を検索しません。デフォルト(これを指定しない)では、異なる言語間での変換および Unicode から各言語への変換で、出力できないヨーロッパの文字は、異体字があれば異体字をで出力します。たとえばフランス語→日本語の変換で、アクサン付きローマ字は、アクサンなしのローマ字に変換して出力します。CONVMODE_NO_VARIANT_EUROPEAN を指定すると、この異体字変換が行われません。このオプションは U+2E80 未満の文字に対して有効です。 |
CONVMODE_NO_VARIANT テキストファイル出力時に、全ての文字の異体字を検索しません。CONVMODE_NO_VARIANT_KANJI と CONVMODE_NO_VARIANT_EUROPEAN を両方指定したときと等価です。 |
CONVMODE_VARIANT_ONLY_ROUNDTRIP テキストファイル出力時に、入力と出力で指定したコードページで逆変換しても元の文字に戻せるときのみ、異体字に変換します。 |
CONVMODE_CONVERT_PUA 2バイトの文字コードの外字領域の変換を有効にします。デフォルト(これを指定しない)では、外字領域の文字は変換不可能な文字として扱われます。 |
CONVMODE_NO_HANKANA 半角カナを全角に変換して出力します。 |
CONVMODE_NO_ZENALPHA 全角アルファベット・数字を半角に変換して出力します。 |
CONVMODE_NO_ZENSPACE 全角空白を半角空白2個に変換して出力します。 |
CONVMODE_NO_ZENSYMBOL 全角記号を半角に変換して出力します。 |
CONVMODE_YEN_NO_BACKSLASH 日本語・韓国語の半角円記号をバックスラッシュに変換せず、U+A5/U+20A9 に変換します。 |
CONVMODE_USE_LOCAL_FONT リッチテキストフォーマット出力時に、ASCII 文字も2バイト用フォント(MS明朝など)で出力します。 |
CONVMODE_NO_GBK 中国語GB2312のテキストファイルを出力するとき、GBK の拡張漢字を出力しません。 |
CONVMODE_OUTPUT_GB18030 中国語GB2312のテキストファイルを出力するとき、GB18030の拡張漢字を出力します。 |
CONVMODE_NO_CW リッチテキスト入力時に、Chinese Writer, Korean Writer, cWnn, kWnn および SIL 等の IPA フォントを認識しません。 |
CONVMODE_OUTPUT_RUBY リッチテキストをテキストファイルに変換するとき、ファイル中のルビをカッコにいれて出力します。 |
CONVMODE_OUTPUT_LINK リッチテキストをテキストファイルに変換するとき、ファイル中のハイパーリンクのリンク先アドレスをカッコに入れて出力します。(表示されている文字列の中にリンク先のアドレスが含まれる場合は出力しません。) |
CONVMODE_OUTPUT_HIDDEN リッチテキストをテキストファイルに変換するとき、ファイル中の隠し文字を出力します。 |
CONVMODE_OUTPUT_CR テキストファイル出力時に、改行を CR で出力します。デフォルト(これを指定しない)では、改行は CR+LF で出力します。 |
CONVMODE_OUTPUT_LF テキストファイル出力時に、改行を LF で出力します。デフォルト(これを指定しない)では、改行は CR+LF で出力します。 |
CONVMODE_USE_DLL_TABLE 自前の変換テーブル SBCTBL.DLL, MBCTBL.DLL のみ使う。 |
CONVMODE_USE_SYSTEM_TABLE OS の変換テーブルのみ使う。 |
CONVMODE_NO_OUTPUT_BOM UTF-16/32 のテキストファイルを出力するとき、ファイル先頭に Byte Order Mark を出力しません。 |
CONVMODE_UTF8_WITH_BOM UTF-8 のテキストファイルを出力するとき、ファイル先頭に Byte Order Mark を出力します。 |
CONVMODE_ENDIAN_AUTO UTF16/32 のテキストファイルを入力するとき、ファイル先頭の Byte Order Mark によりエンディアンを自動的に判別します。もしファイル先頭に Byte Order Mark が存在しないならば、指定されたエンディアン(たとえば、引数 nSrcCodePage が、1200ならばリトルエンディアン、1201ならばビッグエンディアン)で読みこみます。デフォルト(これを指定しない)では、ファイル先頭の Byte Order Mark は無視し、引数 nSrcCodePage で指定されたエンディアンで読みこみます。 |
CONVMODE_EUC_HOJO EUC-JP のテキストファイルを出力するとき、補助漢字を出力します。デフォルト(これを指定しない)では、出力時に補助漢字は変換不可能な文字として扱われます。(入力では、オプションの指定にかかわらず補助漢字を認識します。)EUC-JP の補助漢字の入力・出力は、MBCTBL.DLL を参照して行ないます。MBCTBL.DLL が見つからないときや、CONVMODE_USE_SYSTEM_TABLEを指定したときは、入出力ともに変換不可能な文字として扱われます。 |
ADDITIONAL_MODE_JIS_INPUT_MAC 日本語テキストを入力するときに、Macintoshの変換テーブルに従います。 |
ADDITIONAL_MODE_JIS_OUTPUT_MAC 日本語テキストを出力するときに、Macintoshの変換テーブルに従います。 |
ADDITIONAL_MODE_JIS_OUTPUT_NO_VENDOR 日本語テキストを出力するときに、機種依存文字を出力しません。JIS X 0208:1997として出力します。 |
ADDITIONAL_MODE_JIS_INPUT_NO_VENDOR 日本語テキストを入力するときに、機種依存文字を入力しません。JIS X 0208:1997として入力します。 |
ADDITIONAL_MODE_JIS_INPUT_2004 日本語テキストをJIS X 0213:2004として入力します。 |
ADDITIONAL_MODE_JIS_OUTPUT_2004 日本語テキストをJIS X 0213:2004として入力します。 |
ADDITIONAL_MODE_JIS_NO_JIS83_NEW_STYLE 日本語テキストを出力するときに、JIS83で入れ替えられた新字体26字(EUCの補助漢字出力時は+28字)を出力しません。 |
ADDITIONAL_MODE_JIS_NO_JIS83_OLD_STYLE 日本語テキストを出力するときに、JIS83で入れ替えられた旧字体26字(EUCの補助漢字出力時は+28字)を出力しません。 |
ADDITIONAL_MODE_GBK_TO_LINSHIDAIMA GBK→Unicodeの変換で GB13000 臨時代碼に変換します。 |
ADDITIONAL_MODE_LINSHIDAIMA_TO_GBK Unicode→GBKの変換で GB13000 臨時代碼を変換します。 |
ADDITIONAL_MODE_PUA_TO_HKSCS Unicode→HKSCSの変換で、PUA領域の文字をHKSCSに変換します。 |
ADDITIONAL_MODE_HKSCS_CJKA_TO_PUA HKSCS→Unicodeの変換で、CJK拡張Aに含まれる文字をPUA領域に変換します。 |
ADDITIONAL_MODE_HKSCS_CJKB_TO_PUA HKSCS→Unicodeの変換で、CJK拡張Bに含まれる文字をPUA領域に変換します。 |
ADDITIONAL_MODE_HKSCS_CJK41_TO_PUA HKSCS→Unicodeの変換で、Unicode 4.1 以降に追加された文字をPUA領域に変換します。 |
ADDITIONAL_MODE_HKSCS_ALL_TO_PUA HKSCS→Unicodeの変換で、PUA領域に変換可能な全ての文字をPUA領域に変換します。 |
ADDITIONAL_MODE_HKSCS_1999 HKSCSを出力するときは、HKSCS-1999 で出力します。 |
ADDITIONAL_MODE_HKSCS_2001 HKSCSを出力するときは、HKSCS-2001 で出力します。 |
ADDITIONAL_MODE_KS_NO_UHC 韓国語テキストを出力するとき、EUC-KR本来の文字のみを出力します。 |
ADDITIONAL_MODE_KS_PUNC 韓国語テキストを出力するとき、句点・読点をピリオド・コンマに変換します。 |
typedef struct { size_t cbSize ; const char * pEuropean ; const char * pJapanese ; const char * pChineseSimplified ; const char * pChineseTraditional ; const char * pKorean ; const char * pThai ; } RTFFONTINFO ;
typedef struct { int C ; const char * pFont ; } RTFFONTEXINFO ;
typedef struct { int C ; int nLangId ; } RTFLANGIDINFO ;
/* 日本語のテキストファイル "c:\foo.txt" を Unicode のテキストファイルに変換し、*/ /* "c:\poo.txt" に出力する。 */ #include <windows.h> #include "rtfconv.h" typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ; int main () { /* DLL */ HINSTANCE hRtfconv ; RTFCONVEX pRtfconvEx ; /* Reading DLL */ hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ; if ( hRtfconv == NULL ) { return 1 ; } #ifdef UNICODE pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ; #else pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ; #endif if ( pRtfconvEx == NULL ) { FreeLibrary( hRtfconv ) ; return 1 ; } /* Conversion */ pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.txt"), CP_JAPANESE, CP_UTF16, NULL ) ; /* Finalization */ FreeLibrary( hRtfconv ) ; return 0 ; }
/* 日本語のテキストファイル "c:\foo.txt" を リッチテキストフォーマットに変換し、*/ /* "c:\poo.rtf" に出力する。 */ #include <windows.h> #include "rtfconv.h" typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ; int main () { /* DLL */ HINSTANCE hRtfconv ; RTFCONVEX pRtfconvEx ; /* Reading DLL */ hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ; if ( hRtfconv == NULL ) { return 1 ; } #ifdef UNICODE pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ; #else pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ; #endif if ( pRtfconvEx == NULL ) { FreeLibrary( hRtfconv ) ; return 1 ; } /* Conversion */ pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.rtf"), CP_JAPANESE, 0, NULL ) ; /* Finalization */ FreeLibrary( hRtfconv ) ; return 0 ; }
/* 日本語のテキストファイル "c:\foo.txt" 中の半角カナを全角に変換し、ISO-2022-JP */ /* に変換して "c:\poo.txt" に出力する。 */ #include <windows.h> #include "rtfconv.h" typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ; int main () { /* DLL */ HINSTANCE hRtfconv ; RTFCONVEX pRtfconvEx ; /* Structures */ RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ; /* Reading DLL */ hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ; if ( hRtfconv == NULL ) { return 1 ; } #ifdef UNICODE pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ; #else pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ; #endif if ( pRtfconvEx == NULL ) { FreeLibrary( hRtfconv ) ; return 1 ; } /* Options */ RtfconvExInfo.dwConversionMode = CONVMODE_NO_HANKANA ; /* Conversion */ pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.txt"), CP_JAPANESE, CP_ISO_JAPANESE, & RtfconvExInfo ) ; /* Finalization */ FreeLibrary( hRtfconv ) ; return 0 ; }
/* Unicode の文字列 "こんにちは" を日本語に変換して szBuffer に出力したあと、*/ /* szBuffer の文字列をメッセージボックスで表示する。 */ #include <windows.h> #include "rtfconv.h" typedef intptr_t (WINAPI *RTFCONVSTRINGEX) ( const void *pSrcBuffer, void *pDstBuffer, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo, size_t nMaxLen ) ; int main () { char szBuffer [ 0x100 ] ; /* DLL */ HINSTANCE hRtfconv ; RTFCONVSTRINGEX pRtfconvStringEx ; /* Reading DLL */ hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ; if ( hRtfconv == NULL ) { return 1 ; } pRtfconvStringEx = (RTFCONVSTRINGEX) GetProcAddress( hRtfconv, "RtfconvStringEx" ) ; if ( pRtfconvStringEx == NULL ) { FreeLibrary( hRtfconv ) ; return 1 ; } /* Conversion */ pRtfconvStringEx( L"こんにちは", szBuffer, CP_UTF16, CP_JAPANESE, NULL, sizeof(szBuffer) ); /* Display */ MessageBoxA( NULL, szBuffer, "test", MB_OK ) ; /* Finalization */ FreeLibrary( hRtfconv ) ; return 0 ; }
/* 日本語のテキストファイル "c:\foo.txt" を リッチテキストフォーマットに変換し、*/ /* "c:\poo.rtf" に出力する。 */ /* 1バイト文字は "Arial" で、2バイト文字は "MS Pゴシック" で出力する。 */ #include <windows.h> #include "rtfconv.h" typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ; int main () { /* DLL */ HINSTANCE hRtfconv ; RTFCONVEX pRtfconvEx ; /* Structures */ RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ; RTFFONTINFO FontInfo = { sizeof(RTFFONTINFO) } ; /* Reading DLL */ hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ; if ( hRtfconv == NULL ) { return 1 ; } #ifdef UNICODE pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ; #else pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ; #endif if ( pRtfconvEx == NULL ) { FreeLibrary( hRtfconv ) ; return 1 ; } /* Options */ FontInfo.pEuropean = "Arial" ; FontInfo.pJapanese = "MS Pゴシック" ; RtfconvExInfo.pFontInfo = & FontInfo ; /* Conversion */ pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.rtf"), CP_JAPANESE, 0, & RtfconvExInfo ) ; /* Finalization */ FreeLibrary( hRtfconv ) ; return 0 ; }
/* 日本語のテキストファイル "c:\foo.txt" を リッチテキストフォーマットに変換し、*/ /* "c:\poo.rtf" に出力する。 */ /* 1バイト文字・2バイト文字ともに "MS Pゴシック" で出力する。 */ #include <windows.h> #include "rtfconv.h" typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ; int main () { /* DLL */ HINSTANCE hRtfconv ; RTFCONVEX pRtfconvEx ; /* Structures */ RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ; RTFFONTINFO FontInfo = { sizeof(RTFFONTINFO) } ; /* Reading DLL */ hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ; if ( hRtfconv == NULL ) { return 1 ; } #ifdef UNICODE pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ; #else pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ; #endif if ( pRtfconvEx == NULL ) { FreeLibrary( hRtfconv ) ; return 1 ; } /* Options */ FontInfo.pJapanese = "MS Pゴシック" ; RtfconvExInfo.pFontInfo = & FontInfo ; RtfconvExInfo.dwConversionMode = CONVMODE_USE_LOCAL_FONT ; /* Conversion */ pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.rtf"), CP_JAPANESE, 0, & RtfconvExInfo ) ; /* Finalization */ FreeLibrary( hRtfconv ) ; return 0 ; }
/* ウクライナ語(KOI8-U)のテキストファイル "c:\foo.txt" を リッチテキストファイル */ /* に変換し、"c:\poo.rtf" に出力する。キリル文字を出力するときは、ウクライナ語の言 */ /* 語識別子を出力する */ #include <windows.h> #include "rtfconv.h" typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ; int main () { /* DLL */ HINSTANCE hRtfconv ; RTFCONVEX pRtfconvEx ; /* Structures */ RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ; RTFLANGIDINFO LangIdInfo [] = { { 0x0400, MAKELANGID( LANG_UKRAINIAN, SUBLANG_DEFAULT ) }, /* Cyrillic (0x0400〜0x04FF) */ } ; /* Reading DLL */ hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ; if ( hRtfconv == NULL ) { return 1 ; } #ifdef UNICODE pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ; #else pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ; #endif if ( pRtfconvEx == NULL ) { FreeLibrary( hRtfconv ) ; return 1 ; } /* Options */ RtfconvExInfo.pLangIdInfo = LangIdInfo ; RtfconvExInfo.nNumberOfLangIdInfo = sizeof(LangIdInfo) / sizeof(LangIdInfo[0]) ; /* Conversion */ pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.rtf"), CP_CYRILLIC_KOI8U, 0, & RtfconvExInfo ) ; /* Finalization */ FreeLibrary( hRtfconv ) ; return 0 ; }
/* Unicode のテキストファイル "c:\foo.txt" をリッチテキストフォーマット "c:\poo.rtf" */ /* に出力する。彝文字にはフォント "SIL Yi" を出力する。 */ #include <windows.h> #include "rtfconv.h" typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ; int main () { /* DLL */ HINSTANCE hRtfconv ; RTFCONVEX pRtfconvEx ; /* Structures */ RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ; RTFFONTEXINFO FontExInfo [] = { { 0xA000, "SIL Yi" }, /* Yi Syllables (0xA000〜0xA48F) */ { 0xA490, "SIL Yi" }, /* Yi Radicals (0xA490〜0xA4CF) */ } ; /* Reading DLL */ hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ; if ( hRtfconv == NULL ) { return 1 ; } #ifdef UNICODE pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ; #else pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ; #endif if ( pRtfconvEx == NULL ) { FreeLibrary( hRtfconv ) ; return 1 ; } /* Options */ RtfconvExInfo.pFontExInfo = FontExInfo ; RtfconvExInfo.nNumberOfFontExInfo = sizeof(FontExInfo) / sizeof(FontExInfo[0]) ; /* Conversion */ pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.rtf"), CP_UTF16, 0, & RtfconvExInfo ) ; /* Finalization */ FreeLibrary( hRtfconv ) ; return 0 ; }
/* Unicode のテキストファイル "c:\foo.txt" を日本語のテキストファイルに変換し、 */ /* "c:\poo.txt" に出力する。変換できない文字はひとつの ? を出力する。 */ #include <windows.h> #include "rtfconv.h" typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ; int main () { /* DLL */ HINSTANCE hRtfconv ; RTFCONVEX pRtfconvEx ; /* Structures */ RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ; /* Reading DLL */ hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ; if ( hRtfconv == NULL ) { return 1 ; } #ifdef UNICODE pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ; #else pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ; #endif if ( pRtfconvEx == NULL ) { FreeLibrary( hRtfconv ) ; return 1 ; } /* Options */ RtfconvExInfo.pUnmappableCharFormat = "?" ; RtfconvExInfo.dwConversionMode = CONVMODE_OUTPUT_CODE_NUMBER ; /* Conversion */ pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.txt"), CP_UTF16, CP_JAPANESE, & RtfconvExInfo ) ; /* Finalization */ FreeLibrary( hRtfconv ) ; return 0 ; }
/* 中国語簡体字のテキストファイル "c:\foo.txt" を日本語のテキストファイルに変換し、*/ /* "c:\poo.txt" に出力する。変換できない文字は [UC+%04X] でUnicodeのコード番号を出 */ /* 力する。 */ #include <windows.h> #include "rtfconv.h" typedef int (WINAPI *RTFCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const RTFCONVEXINFO *pRtfconvExInfo ) ; int main () { /* DLL */ HINSTANCE hRtfconv ; RTFCONVEX pRtfconvEx ; /* Structures */ RTFCONVEXINFO RtfconvExInfo = { sizeof(RTFCONVEXINFO) } ; /* Reading DLL */ hRtfconv = LoadLibrary( TEXT("rtfconv.dll") ) ; if ( hRtfconv == NULL ) { return 1 ; } #ifdef UNICODE pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExW" ) ; #else pRtfconvEx = (RTFCONVEX) GetProcAddress( hRtfconv, "RtfconvExA" ) ; #endif if ( pRtfconvEx == NULL ) { FreeLibrary( hRtfconv ) ; return 1 ; } /* Options */ RtfconvExInfo.pUnmappableCharFormat = "[UC+%04X]" ; RtfconvExInfo.dwConversionMode = CONVMODE_OUTPUT_CODE_NUMBER ; /* Conversion */ pRtfconvEx ( TEXT("c:\\foo.txt"), TEXT("c:\\poo.txt"), CP_CHINESE_SIMPLIFIED, CP_JAPANESE, & RtfconvExInfo ) ; /* Finalization */ FreeLibrary( hRtfconv ) ; return 0 ; }
1. 異体字の変換
「RTFコンバータ」の大きな特長の一つに「異体字の変換を行なう」という点が挙げられます。この異体字の変換はデフォルトで行なわれるため、どのようなときに異体字の変換が行なわれるかをプログラマが把握しておかないと、時に意図せぬ変換が行なわれることにもなりかねません。デフォルトで異体字の変換が行なわれるのは、次の文字コー ドでの変換においてです。
日本語・中国語・韓国語間での変換 | 異体字に変換する |
中国語簡体字・中国語繁体字間での変換 | 異体字に変換する |
ヨーロッパの各文字コード間での変換 | 出力できない文字のみ異体字に変換する |
Unicodeから東アジアの文字コードへの変換 | 異体字に変換する |
Unicodeからヨーロッパの文字コードへの変換 | 出力できない文字のみ異体字に変換する |
次のような場合には異体字の変換は行なわれません。
日本語(Shift-JIS・EUC-JP・ISO-2022-JP)間での変換 | 異体字には変換しない |
韓国語(EUC-KR・Johab)間での変換 | 異体字には変換しない |
UTF-16, UTF-16(Big Endian), UTF-8 間での変換 | 異体字には変換しない |
Unicodeで出力 | 異体字には変換しない |
リッチテキストで出力 | 異体字には変換しない |
「日本語→Unicode→日本語」のように変換を行なうと、後半の「Unicode→日本語」の段階で異体字の変換が行なわれ、第2水準の漢字の多くが、対応する第1水準の漢字に変換されます。
この異体字の変換を抑止するには、RTFCONVEXINFO 構造体 の dwConversionMode に明示的に CONVMODE_NO_VARIANT (または CONVMODE_NO_VARIANT_KANJI と CONVMODE_NO_VARIANT_EUROPEAN) を指定しなければなりません。
リッチテキストからテキストへの変換時には、リッチテキスト中のフォントの文字セットを見て、上記の原則に準じて異体字の変換を行うかどうか判断します。
2. 変換テーブル
RTFCONV.DLL は実行時に、変換テーブルを、まず OS から探します。もし OS に変換テーブルが見つからない場合は、RTFCONV.DLL と同じディレクトリにある SBCTBL.DLL と MBCTBL.DLL から探します。OS に変換テーブルが見つからず、かつ、SBCTBL.DLL と MBCTBL.DLL が存在しないか、SBCTBL.DLL と MBCTBL.DLL にも変換テーブルが見つからないときは、変換は失敗し、エラーを返します。
この動作は、RTFCONVEXINFO 構造体 の dwConversionMode に CONVMODE_USE_DLL_TABLE または CONVMODE_USE_SYSTEM_TABLE を指定することにより、制御することが可能です。たとえば、OS に何らかの問題がある場合、CONVMODE_USE_DLL_TABLE を指定すれば、OS の変換テーブルを検索せずに、SBCTBL.DLL と MBCTBL.DLL のみ使用します。
あらかじめ OS に変換テーブルが存在することが確実であり、すべて OS の変換テーブルを参照して変換を行ないたいときは、SBCTBL.DLL と MBCTBL.DLL をインストールする必要はありません。CONVMODE_USE_SYSTEM_TABLE を指定する必要もありません。これは、たとえば 日本語 Windows 上で日本語のみのファイルを扱うような場合が当てはまります。
3. 日本語 EUC の入出力
日本語 EUC の入出力時に、JIS X 0212(補助漢字)に相当する文字が含まれていた場合、RTFCONV.DLL は MBCTBL.DLL の補助漢字変換テーブルを参照しようとします。MBCTBL.DLL が見つからないときは、システムの CP20932 の変換テーブルから補助漢字の変換を試みます。
MBCTBL.DLL が見つからない、あるいは RTFCONVEXINFO 構造体 の dwConversionMode に CONVMODE_USE_SYSTEM_TABLE を指定して MBCTBL.DLL への参照を抑止した場合で、かつ CP20932 の変換テーブルが見つからない場合は、補助漢字を変換することができません。(変換不可能な文字と見なされます。エラーは出しません。)現在の環境で補助漢字が変換できるかを確認するには、次のような判定法を使うことができます。
4. 中国語繁体字 HKSCS と EUC-TW の入出力
中国語繁体字 HKSCS の入出力では、RTFCONV.DLL はつねに SBCTBL.DLL と MBCTBL.DLL
を参照します。システムに Microsoft HKSCS モジュールがインストールされていると、中国語繁体字 BIG5 も中国語繁体字 HKSCS も、SBCTBL.DLL と MBCTBL.DLL を参照するようになります。変換できないときは、エラーを返します。
中国語繁体字 EUC-TW の入出力では、RTFCONV.DLL は CNSTBL.DLL を参照します。変換できないときは、エラーを返します。
5. JIS2004 の入出力
日本語の入出力で、RTFCONVEXINFO 構造体 の dwAdditionalMode に ADDITIONAL_MODE_JIS_INPUT_2004 または ADDITIONAL_MODE_JIS_OUTPUT_2004 を指定して JIS X 0213:2004 の変換を行うとき、RTFCONV.DLL は MBCTBL.DLL の変換テーブルを参照しようとします。変換できないときは、エラーを返します。
int IsHojoKanjiAvailable ( void ) {
int result = RtfconvCharEx ( 0x8FB0A1, CP_EUC_JAPANESE, CP_UTF16, NULL ) ;
if ( result == -1 ) return 0 ; /* 補助漢字は変換不可 */
else return 1 ; /* 補助漢字は変換可能 */
}