我有一个UNICODE的DLG工程,上面有一个EDIT,两个按钮A,BA按下时,就从一个文本文件(X1.TXT)里面读一行内容(内容是中文的)显示到EDIT上;
B按下时,就把EDIT上的内容(也是中文)写入到一个文本文件中(X2.TXT)我的操作系统是日文WIN2000.
问题是:
工程运行后,A按下后,EDIT表示出来的内容是乱码!
而在EDIT中输入中文后,B按下,结果X2.TXT的里面的东西在中文系统上打开也是乱码!这个问题该如何才能解决?
即如何在A按下后,EDIT上能正确表示中文,
B按下后,写入的内容(X2.TXT)如何在中文系统在表示正确?注:只在中文系统上运行是没有问题的!

解决方案 »

  1.   

    代码如下
     LPSTR B2A(BSTR lp)
    {
    int nLen=(lstrlenW(lp)+1)<<1; LPSTR str=new char[nLen]; WideCharToMultiByte(CP_ACP, 0, lp, -1, str, nLen, NULL, NULL); return str;
    }BSTR A2B(char * lp)
    {
    int nLen = strlen(lp)>>1-1; BSTR str = ::SysAllocStringLen(NULL, nLen);

    MultiByteToWideChar(CP_ACP, 0, lp, -1, str, nLen); return str;
    }void CUNICODEDlg::OnButtonA() 
    {
    FILE* out;
    unsigned char ch,ch1;
    int i=0;
    char name[100]; memset(name,0x0,100);
    out = fopen("f:\\x1.txt", "rb");
    while(!feof(out))
    {
    fread(&ch,sizeof(char),1,out);
        if(ch==0x0D)
    {
    fread(&ch1,sizeof(char),1,out);
    if(ch1==0x0A)
    {
    break;
    }else{
    fseek(out,-1,SEEK_CUR );
    name[i]=ch;
    i++;
    }
    }else{
    name[i]=ch;
    i++;
    }
    }
            //m_txt是EDIT的变量
    m_txt=A2B(&name[0]);
    this->UpdateData(FALSE);
    fclose(out);
    }void CUNICODEDlg::OnButtonB() 
    {
    FILE* out;
    int i=0;
    char *name=NULL;
    out = fopen("f:\\x2.txt", "wb");
    this->UpdateData(TRUE); name=B2A(m_txt.GetBuffer(m_txt.GetLength()));
    fwrite(name,
    strlen(name),1,out);
    fclose(out);
    }
      

  2.   

    写入 读出 text文件不要进行wide char 和 ansi字符串的转化
    用支持widechar的 fwprintf();fwscanf()...
    尽量不要用WideCharToMultiByte这样函数自己转化~~~~
      

  3.   

    to akun
    请问自己如何来转换?
    为什么不用WideCharToMultiByte
      

  4.   

    WideCharToMultiByte
    MultiByteToWideChar
    在不同语系的系统上是没有办法得到一样的结果的?
    因为不同语系的系统上代码页不一样,但如果不用上面两个函数的话,
    自己如何来进行转换?
    好象要建张表来查什么的?那位能提供些资料也好啊!
      

  5.   

    将.rc用text方式打开。
    删除与语言有关的代码。
    中文代码是936.将这些关于语言的代码全删掉。应该在
    什么语言环境下都可以运行把
      

  6.   

    L强制转换,TEXT和_T按照是否定义unicode定义来
      

  7.   

    to friends1979
    谢谢,可惜不行的
      

  8.   

    to abramsL name?
    _T(name)?
    怎么转?
      

  9.   

    UNICODE----GB
    GB------UNICODE
    它们是什么样的对应关系?解决问题我再加一百分答谢各位!请帮忙啊!
      

  10.   

    如果用到多字符集,建议是用widechar,不要用ansi string~~~~~~~~
      

  11.   

    我的意思是整个project最好用统一的字符串格式,这样就不用widechartomultibyte这样的函数了,不是说要自己来写这样的函数
    :-Dansi字符串能做的事,widechar字符串都可以做,而且速度更快~~~
      

  12.   

    我的限定条件是必须要进行转换!
    文件是的ANSI的,内容是中文的,
    操作系统在日文2000下,
    最后还要把修改好的内容重新写回文件中去
    所以必须要转来转去啊:(
      

  13.   

    这样:1。setlocale()设定使用的字符集~~~这样就无所谓操作系统是中文还是日文了~~~~~~~~~
    2。用fwprintf();fwscanf()...读写文件~
    用这些函数好像一样可以操作ansi的文本文件~~~搂住试一下?
      

  14.   

    setlocale()对WideCharToMultiByte和MultiByteToWideChar
    好象没有什么影响setlocale(LC_ALL,"chs_china.936");
    设定好后转换出来的结果还是不行!和没有使用的结果是一样的fwprintf();fwscanf()使用这两个函数读文件没有什么作用的,因为是ANSI文件,读出来后不会自动转换的,所以也是乱码是在日文2000下试的
      

  15.   

    不会吧~~~,我用的挺好的,如果不用setlocale也会出现乱吗~~~~
    用了setlocale就ok了setlocale(LC_ALL,"chs");日文2000下支持中文简体显示吗??你放到中文系统下看看~~~~~~
      

  16.   

    to akun
    是的,总之在日文下中文内容转出来的结果不对!
    在UNICODE工程下,EDIT控件可以正确显示中文的
    在中文系统下是完全正确的同样,在中文系统下转换日文也是不对的
    就算是用了setlocale也不行!你是在什么系统上试验的?
      

  17.   

    终于解决了,谢谢大家的参与!
    VERY GOOD!各位想知道如何才能实现吗?