在2000和xp下,文本格式有两种字符格式,我用代码生成UNICODE编码方式的文本,但是不能写中文进去,请问为什么啊。谢谢:
代码如下:
//----------------------.h-----------------------
#ifndef LANE_CREATGRAMMAR_H
#define LANE_CREATGRAMMAR_H#include <stdio.h>
#include <stdarg.h>
#include <windows.h>#include <wchar.h>
class CGrammarFile
{
private: BOOL m_bEnableWrite;
wchar_t m_sGraFileName[24];
public:
CGrammarFile( wchar_t *sFileName );
virtual ~CGrammarFile(); void WriteGraStart(); //调用次序1
void WriteDefine( int value );
void WriteTopRule();
void WriteNameRule( int value , wchar_t *name );
void WriteGraEnd(); //调用次序5};#endif // LANE_CREATGRAMMAR_H
//---.cpp---------------------#include "CreatGrammar.h"
#define _UNICONDE
#define UNICONDE
//保存文件名到成员变量
CGrammarFile::CGrammarFile( wchar_t *sFileName )
{
wcscpy( m_sGraFileName, sFileName );
m_bEnableWrite = FALSE;
}CGrammarFile::~CGrammarFile()
{}//写文法文件头和定义头
void CGrammarFile::WriteGraStart()
{
FILE* pFile = NULL;
pFile = _wfopen(m_sGraFileName, L"wb");
fclose ( pFile );
pFile = _wfopen(m_sGraFileName, L"a+"); if ( pFile != NULL ) {
//写文件头
fwprintf ( pFile, L"<GRAMMAR LANGID=\"804\">\n" );
//写定义头
fwprintf(pFile, L"\t<DEFINE>\n");
fclose ( pFile ); m_bEnableWrite = TRUE;
}
}
//写定义内容
void CGrammarFile::WriteDefine( int value )
{
if ( m_bEnableWrite ) {
FILE *pFile = NULL;
pFile = _wfopen (  m_sGraFileName, L"a+");
if ( pFile != NULL ) {
wchar_t buf[256];

// 生成<ID NAME="VID_SubNamexxxx" VAL="xxxx">
swprintf ( buf, L"\t\t<ID NAME=\"VID_SubName%d\" VAL=\"%d\"/>\n", value, value+4000 );

fwprintf ( pFile, buf );
fclose ( pFile );
}
}
}
//写定义结尾,写顶级规则,人名规则头
void CGrammarFile::WriteTopRule()
{
if ( m_bEnableWrite ) {
FILE *pFile = NULL;
pFile = _wfopen (  m_sGraFileName, L"a+");
if ( pFile != NULL ) {

//写定义结尾
fwprintf(pFile, L"\t\t<ID NAME=\"VID_SubNameRule\" VAL=\"9000\"/>\n");
fwprintf(pFile, L"\t\t<ID NAME=\"VID_TopLevelRule\" VAL=\"8000\"/>\n");
fwprintf(pFile, L"\t</DEFINE>\n");

//写顶级规则
fwprintf ( pFile, L"\t<RULE ID=\"VID_TopLevelRule\" TOPLEVEL=\"ACTIVE\">\n");

fwprintf ( pFile, L"\t\t<O>\n\t\t\t<L>\n"); //<O>????????????????

fwprintf ( pFile, L"\t\t\t\t<O>我</O>\n");
fwprintf ( pFile, L"\t\t\t\t<O>要</O>\n");
fwprintf ( pFile, L"\t\t\t\t<O>请</O>\n");
fwprintf ( pFile, L"\t\t\t\t<O>叫</O>\n");
fwprintf ( pFile, L"\t\t\t\t<O>找</O>\n");
fwprintf ( pFile, L"\t\t\t\t<O>一</O>\n");
fwprintf ( pFile, L"\t\t\t\t<O>下</O>\n"); fwprintf ( pFile, L"\t\t\t</L>\n\t\t</O>\n"); //<O>??????????????

fwprintf ( pFile, L"\t\t<RULEREF REFID=\"VID_SubNameRule\" />\n");

fwprintf ( pFile, L"\t</RULE>\n");



//写名字规则头
fwprintf ( pFile, L"\t<RULE ID=\"VID_SubNameRule\" >\n");
fwprintf ( pFile, L"\t\t<L PROPID=\"VID_SubNameRule\">\n");

fclose ( pFile );
}
}
}//写名字规则体
void CGrammarFile::WriteNameRule( int value , wchar_t *name )
{
if ( m_bEnableWrite ) {
FILE *pFile = NULL;
pFile = _wfopen (  m_sGraFileName, L"a+");
if ( pFile != NULL ) {
wchar_t buf[256];

// 生成<ID NAME="VID_SubNamexxxx" VAL="xxxx">
swprintf ( buf, L"\t\t\t<P VAL=\"VID_SubName%d\">%s</P>\n", value, name ) ;

fwprintf ( pFile, buf );
fclose ( pFile );
}
}
}//写名字规则尾,写文法文件结尾
void CGrammarFile::WriteGraEnd()
{
if ( m_bEnableWrite ) {
FILE *pFile = NULL;
pFile = _wfopen(m_sGraFileName, L"a+"); if ( pFile != NULL ) { //写名字规则尾
fwprintf ( pFile, L"\t\t</L>\n" );
fwprintf ( pFile, L"\t</RULE>\n" );

//写文法文件尾
fwprintf ( pFile, L"</GRAMMAR>" );
fclose  (pFile );
}
m_bEnableWrite = FALSE;
}
}
//---------------------------------------------------
当然不比全看,看一部分就够了,我生成了*.xml文件后,文件里的中文却显示不了,英文没问题,请问是怎么回事啊,我用记事本打开后,显示不了中文,我用的mfc。各位请指教阿、、、怎么才能生成UNICODE文本,然后写进去中文阿