ChnconvEx ChnconvStringEx ChnconvCharEx IsChnconvValidCodePage GetChnconvLastError AbortChnconv GetDllVersion |
CHNCONVEXINFO CHNFONTINFO CHNCONV_USERDEF |
使用例 1    使用例 2    使用例 3    使用例 4    |
int WINAPI ChnconvEx ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const CHNCONVEXINFO * pChnconvExInfo ) ;
LPCTSTR pSrcFileName 入力ファイルのファイル名を指定 LPCTSTR pSrcFileName 出力ファイルのファイル名を指定入力ファイル名と出力ファイル名は、絶対パス名でも相対パス名でもかまいません。UNC でもかまいません。ファイル名に NULL を指定すると 標準入出力(stdin または stdout)を指定したものとみなします。入力ファイルと出力ファイルに同一のファイルを指定した場合の動作は未定義です。入力ファイルのサイズに制限はありません(ディスクのファイルシステムの制限に依存します)。
int nSrcCodePage 入力ファイルのコードページ int nDstCodePage 出力ファイルのコードページ入出力ファイルの文字コードを指定します。文字コードの番号は以下のとおりです。
GB2312/GBK 936 BIG5 950 Chinese Writer 932 + 0x10000 Nihao 932 + 0x20000 cWnn 932 + 0x30000 中文起稿 932 + 0x40000 CX 932 + 0x50000 KOA-TechnoMate中国語 932 + 0x60000 卓絶 932 + 0x70000 フロント文華 932 + 0x80000 HZ 52936これらの番号は、chnconv.h で以下のような定数で定義されています。
GB2312/GBK CP_CHINESE_SIMPLIFIED BIG5 CP_CHINESE_TRADITIONAL Chinese Writer CP_CHINESE_CW Nihao CP_CHINESE_NH cWnn CP_CHINESE_CWN 中文起稿 CP_CHINESE_ZQ CX CP_CHINESE_CX KOA-TechnoMate中国語 CP_CHINESE_TM 卓絶 CP_CHINESE_ZJ フロント文華 CP_CHINESE_FW HZ CP_HZ_CHINESE_SIMPLIFIEDこのうち KOA-TechnoMate中国語・フロント文華・HZ は入力のみです。出力には指定できません。入力と出力に同じ文字コードを指定することはできません。これらの定数は chnconv.h に定義されています。
const CHNCONVEXINFO * pChnconvExInfo 変換オプション構造体 CHNCONVEXINFO のアドレスを指定します。この構造体により、変換を制御するための各種オプションを指定することができます。必要でなければ NULL を指定します。
CHNCONV_SUCCESS 変換が成功した |
CHNCONV_ERROR_UNKNOWN 原因不明のエラーが発生した |
CHNCONV_ERROR_READ 読み込みに失敗した |
CHNCONV_ERROR_WRITE 書き込みに失敗した |
CHNCONV_ERROR_RTFFORMAT リッチテキストフォーマットの形式にエラーがあった |
CHNCONV_ERROR_RTFBRACE リッチテキストフォーマットのカッコが対応していない |
CHNCONV_ERROR_MEMORY 必要なメモリーが確保できなかった |
CHNCONV_ERROR_CODEPAGE 無効なコードページを指定した |
CHNCONV_ERROR_ABORTED 変換中に AbortChnconv により中断された |
CHNCONV_ERROR_PARAM 引き数の指定に誤りがあった |
intptr_t WINAPI ChnconvStringEx ( const char * pSrcBuffer, char * pDstBuffer, int nSrcCodePage, int nDstCodePage, const CHNCONVEXINFO * pChnconvExInfo, size_t nMaxLen ) ;
const char * pSrcBuffer 変換する文字列のポインタを指定 char * pDstBuffer 出力するバッファのポインタを指定
int nSrcCodePage 元の文字列のコードページ int nDstCodePage 出力する文字列のコードページ const CHNCONVEXINFO * pChnconvExInfo 変換オプション
size_t nMaxLen 出力するバッファの最大サイズ(バイト)を指定引き数 nSrcCodePage, nDstCodePage, pChnconvExInfo は、ChnconvEx で使われるものと同じなので、そちらを参照してください。
int WINAPI ChnconvCharEx ( int C, int nSrcCodePage, int nDstCodePage, const CHNCONVEXINFO * pChnconvExInfo ) ;
int C 変換する文字を指定
int nSrcCodePage 元の文字列のコードページ int nDstCodePage 出力する文字列のコードページ const CHNCONVEXINFO * pChnconvExInfo 変換オプション引き数 nSrcCodePage, nDstCodePage, pChnconvExInfo は、ChnconvEx で使われるものと同じなので、そちらを参照してください。モードのあるコードページ(HZ)を指定することはできません。
int WINAPI IsChnconvValidCodePage ( int nSrcCodePage, int nDstCodePage ) ;
int WINAPI GetChnconvLastError ( void ) ;
CHNCONV_SUCCESS 変換が成功した |
CHNCONV_ERROR_UNKNOWN 原因不明のエラーが発生した |
CHNCONV_ERROR_READ 読み込みに失敗した |
CHNCONV_ERROR_WRITE 書き込みに失敗した |
CHNCONV_ERROR_RTFFORMAT リッチテキストフォーマットの形式にエラーがあった |
CHNCONV_ERROR_RTFBRACE リッチテキストフォーマットのカッコが対応していない |
CHNCONV_ERROR_MEMORY 必要なメモリーが確保できなかった |
CHNCONV_ERROR_CODEPAGE 無効なコードページを指定した |
CHNCONV_ERROR_ABORTED 変換中に AbortChnconv により中断された |
CHNCONV_ERROR_PARAM 引き数の指定に誤りがあった |
int WINAPI AbortChnconv ( void ) ;
int WINAPI GetDllVersion ( void ) ;
typedef struct { size_t cbSize ; unsigned long dwConversionMode ; unsigned long dwAdditionalMode ; const CHNFONTINFO * pFontInfo ; const CHNCONV_USERDEF * pSrcToDst ; size_t nNumberOfSrcToDst ; const CHNCONV_USERDEF * pSrcToUc ; size_t nNumberOfSrcToUc ; int nFontSize ; const void * pReserved ; } CHNCONVEXINFO ;
CONVMODE_PEEKMESSAGE 変換中にメッセージループをまわす。 |
CONVMODE_OUTPUT_CODE_NUMBER 出力時に、変換できない文字はコード番号を出力する。形式は各入力コードに応じて、"[文字コード名:番号]"となります。デフォルト(これを指定しない)では、変換できない文字は、半角文字なら ? に、全角文字なら ?? に変換されます。 |
CONVMODE_INPUT_CODE_NUMBER テキストファイル入力時に、CONVMODE_OUTPUT_CODE_NUMBER で出力された形式のコード番号を文字として認識する。 |
CONVMODE_ONE_QUESTION_MARK 出力時に、変換できない文字は、全角・半角にかかわらず、一つの ? を出力する。デフォルト(これを指定しない)では、変換できない文字は、半角文字なら ? に、全角文字なら ?? に変換されます。 |
CONVMODE_CONVERT_TXT 強制的にテキストファイルとして変換する。デフォルト(これを指定しない)では、ファイル先頭の内容を見て、テキストファイルとリッチテキストフォーマットを自動的に判別します。この自動判別を無効にして、必ずテキストファイルとして処理したい場合は CONVMODE_CONVERT_TXT を指定してください。 |
CONVMODE_CONVERT_RTF 強制的にリッチテキストフォーマット(またはKOA-TechnoMate中国語のワープロファイル)として変換する。デフォルト(これを指定しない)では、ファイル先頭の内容を見て、テキストファイルとリッチテキストフォーマットを自動的に判別します。この自動判別を無効にして、必ずリッチテキストフォーマットとして処理したい場合は CONVMODE_CONVERT_RTF を指定してください。 |
CONVMODE_CHNCONV_NO_VARIANT Big5 <-> GB(およびCW/NH/CWN/ZQ/CX/ZJ/HZ/TM/FW)の変換で、できるだけ同じ形の漢字に変換する。このオプションは OS に中国語サポートがインストールされている必要があります。 |
CONVMODE_CHNCONV_NO_GBK GB で入出力するとき、B2312の範囲の文字のみで入出力をおこなう。 |
CONVMODE_PINYIN_BY_ASCII GB/BIG5のリッチテキストフォーマットを出力するとき、ピンインをヨーロッパの文字のフォント(Times New Romanなど)で出力。デフォルト(これを指定しない)では漢字と同じフォントで出力します。 |
CONVMODE_OUTPUT_NEW_FONT Chinese Writer のリッチテキストを出力するとき、Version 7 以降のフォント名で出力し、古いフォント名でも表示できるよう Version 6 までのフォント名を「代替フォント」として出力する。デフォルト(これを指定しない)では Version 6 までのフォント名で出力し、新しいフォント名でも表示できるよう Version 7 以降のフォント名を「代替フォント」として出力します。 |
CONVMODE_SENSE_CW_FANTIZI リッチテキストの入力で、CW/CWN の繁体字フォントを認識します。 |
CONVMODE_CW_TXT_FANTIZI テキストファイルの入力で、CW/CWのテキストを繁体字として変換します。 |
CONVMODE_NO_USE_UNICODE 内部で OS による Unicode 経由の変換を一切行わないようにします。このオプションを指定すると、CONVMODE_CHNCONV_NO_VARIANT は自動的に無効になります。 |
typedef struct { size_t cbSize ; const char *pGbFont ; const char *pGbGothicFont ; const char *pBig5Font ; const char *pBig5GothicFont ; const char *pPinyinFont ; const char *pPinyinGothicFont ; } CHNFONTINFO ;
typedef struct { int nSrc ; int nDst ; } CHNCONV_USERDEF ;
/* Chinese Writerのファイル "c:\foo.rtf" を GBに変換し、"c:\poo.rtf" に出力す */ /* る。 */ #include <windows.h> #include "chnconv.h" typedef int (WINAPI *CHNCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const CHNCONVEXINFO *pChnconvExInfo ) ; int main () { /* DLL */ HINSTANCE hChnconv ; CHNCONVEX pChnconvEx ; /* Reading DLL */ hChnconv = LoadLibrary( TEXT("chnconv.dll") ) ; if ( hChnconv == NULL ) { return 1 ; } #ifdef UNICODE pChnconvEx = (CHNCONVEX) GetProcAddress( hChnconv, "ChnconvExW" ) ; #else pChnconvEx = (CHNCONVEX) GetProcAddress( hChnconv, "ChnconvExA" ) ; #endif if ( pChnconvEx == NULL ) { FreeLibrary( hChnconv ) ; return 1 ; } /* Conversion */ pChnconvEx ( TEXT("c:\\foo.rtf"), TEXT("c:\\poo.rtf"), CP_CHINESE_CW, CP_CHINESE_SIMPLIFIED, NULL ) ; /* Finalization */ FreeLibrary( hChnconv ) ; return 0 ; }
/* cWnn の文字列 "中国" を GB に変換して szGbBuffer に出力し、さらに Unicode に */ /* 変換して szUcBuffer に出力し、メッセージボックスで表示する。 */ #include <windows.h> #include "chnconv.h" typedef intptr_t (WINAPI *CHNCONVSTRINGEX) ( const void *pSrcBuffer, void *pDstBuffer, int nSrcCodePage, int nDstCodePage, const CHNCONVEXINFO *pChnconvExInfo, size_t nMaxLen ) ; int main () { char szGbBuffer [ 0x100 ] ; wchar_t szUcBuffer [ 0x100 ] ; /* DLL */ HINSTANCE hChnconv ; CHNCONVSTRINGEX pChnconvStringEx ; /* Reading DLL */ hChnconv = LoadLibrary( TEXT("chnconv.dll") ) ; if ( hChnconv == NULL ) { return 1 ; } pChnconvStringEx = (CHNCONVSTRINGEX) GetProcAddress( hChnconv, "ChnconvStringEx" ) ; if ( pChnconvStringEx == NULL ) { FreeLibrary( hChnconv ) ; return 1 ; } /* Convert to GB */ pChnconvStringEx( "嶄忽", szGbBuffer, CP_CHINESE_CWN, CP_CHINESE_SIMPLIFIED, 0, sizeof(szGbBuffer) ); /* Convert to UNICODE */ MultiByteToWideChar ( CP_CHINESE_SIMPLIFIED, 0, szGbBuffer, -1, szUcBuffer, sizeof(szUcBuffer)/sizeof(wchar_t) ) ; /* Display */ MessageBoxW( NULL, szUcBuffer, L"test", MB_OK ) ; /* Finalization */ FreeLibrary( hChnconv ) ; return 0 ; }
/* cWnn の文字 '中' (0x9BCE) を GB に変換して標準出力に出力する例 */ #include <windows.h> #include <stdio.h> #include "chnconv.h" typedef intptr_t (WINAPI *CHNCONVCHAREX) ( int C, int nSrcCodePage, int nDstCodePage, int nSrcCodePage, int nDstCodePage, const CHNCONVEXINFO *pChnconvExInfo ) ; int main () { int C ; /* DLL */ HINSTANCE hChnconv ; CHNCONVCHAREX pChnconvCharEx ; hChnconv = LoadLibrary( "chnconv.dll" ) ; if ( hChnconv == NULL ) return 1 ; pChnconvCharEx = (CHNCONVSTRING) GetProcAddress( hChnconv, "ChnconvCharEx" ) ; if ( pChnconvCharEx == NULL ) { FreeLibrary( hChnconv ) ; return 1 ; } C = pChnconvCharEx( 0x9BCE, CP_CHINESE_CWN, CP_CHINESE_SIMPLIFIED, NULL ); if ( C <= 0 ) { FreeLibrary( hChnconv ) ; return 1 ; } if ( C & 0xFF00 ) fputc( ( C >> 8 ) & 0xFF, stdout ) ; fputc( C & 0xFF, stdout ) ; FreeLibrary( hChnconv ) ; return 0 ; }
/* Chinese Writerのファイル "c:\foo.rtf" を GBに変換し、"c:\poo.rtf" に出力す */ /* る。漢字の出力は "STKaiti" フォントを使用する。 */ #include <windows.h> #include "chnconv.h" typedef int (WINAPI *CHNCONVEX) ( LPCTSTR pSrcFileName, LPCTSTR pDstFileName, int nSrcCodePage, int nDstCodePage, const CHNCONVEXINFO *pChnconvExInfo ) ; int main () { /* DLL */ HINSTANCE hChnconv ; CHNCONVEX pChnconvEx ; /* Structures */ CHNCONVEXINFO ChnconvExInfo = { sizeof(CHNCONVEXINFO) } ; CHNFONTINFO FontInfo = { sizeof(CHNFONTINFO) } ; /* Reading DLL */ hChnconv = LoadLibrary( TEXT("chnconv.dll") ) ; if ( hChnconv == NULL ) { return 1 ; } #ifdef UNICODE pChnconvEx = (CHNCONVEX) GetProcAddress( hChnconv, "ChnconvExW" ) ; #else pChnconvEx = (CHNCONVEX) GetProcAddress( hChnconv, "ChnconvExA" ) ; #endif if ( pChnconvEx == NULL ) { FreeLibrary( hChnconv ) ; return 1 ; } /* Options */ FontInfo.pGbFont = "STKaiti" ; ChnconvExInfo.pFontInfo = & FontInfo ; /* Conversion */ pChnconvEx ( TEXT("c:\\foo.rtf"), TEXT("c:\\poo.rtf"), CP_CHINESE_CW, CP_CHINESE_SIMPLIFIED, & ChnconvExInfo ) ; /* Finalization */ FreeLibrary( hChnconv ) ; return 0 ; }