怎么把中文字符转成unicode后显示在窗口上?

解决方案 »

  1.   

    我有一个工程并不是unicode的,所以把一个utf-8编码的中文文件显示在窗口上都是乱码,所以想把文件读取出来的字符转成宽字符,再调用用 SetWindowTextW( hwndEdit1, wptrData1 ) ;显示出来,我试了两种方法:1. 用MultiByteToWideChar函数把字符转成宽字节。2. 用mbstowcs函数转,之前先调一下setlocale( LC_ALL, "CHS" );两种方法显示的中文还是乱码,是否有不把整个工程改成unicode的情况下能争确显示utf-8中文文件的内容。
      

  2.   

    不是说unicode的工程(代码都用宽字节字符和函数)可以在纯英文的系统环境下正确显示任何语言吗? 如果装好中文包的英文系统,切换到中文选项,utf-8的中文文件可以正确显示,不需要做任何转换.
      

  3.   

    你把utf-8转unicode
    int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
        strSrc = new WCHAR[i+1];
        MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);
      

  4.   

    用过atlconv.h么?
    USE_CONVERSION
    A2W
      

  5.   

    http://javawind.net/tools/native2ascii.jsp
      

  6.   

    String s = "中国加油!";char[] c = s.toCharArray();for(char tmp:c)System.out.print("\\u" + Integer.toHexString(tmp) + " ");
      

  7.   

    第一种肯定没问题。第二种我测试了一下:_wsetlocale(LC_ALL,L"chs"); wchar_t buffer[256];
    size_t n = 0; char* str = "中文ING";
    mbstowcs_s(&n,buffer,strlen(str),str,256);也没问题
      

  8.   


    你试的时候是在纯英语的系统下吗?我试下来在纯英语系统下是乱码,但是把下面的选项改成中文就行了不是说unicode的工程(代码都用宽字节字符和函数)可以在纯英文的系统环境下正确显示任何语言吗? 如果装好中文包的英文系统,切换到中文选项,utf-8的中文文件可以正确显示,不需要做任何转换. 
      

  9.   

    中文软件的正确使用 在安装了东亚语言支持后,所有的中文文件都可以打开了,不过在你安装和运行软件的时候可能发现有部分的中文软件还是不能正常安装和运行,因为其界面上显示的还是乱码。但为什么有些中文程序就可以正常显示呢? 其实,所有能够正常显示的中文软件都是符合Unicode标准的,例如微软的Office,不用额外的设置,这些软件就可以在任何语种的平台上使用(当然前提是已经在不同语言的平台上安装了中文的字体)。不过有些不符合Unicode标准的程序在使用上就有些麻烦了,好在Windows XP中有设置的地方。 同样是在控制面板的“Regional and Language Options”设置下,打开“Advanced”选项卡,在这里有一个“Select a language to match the language version of the non-Unicode programs you want to use”的设置(图二),这里就是给你的非Unicode程序设置语言环境的。如果你比较常用简体中文的非Unicode程序,就在这里的下拉菜单中选择“Chinese(PRC)”,然后确定并重启动电脑。这样就可以正常使用这些程序了。 
    http://zhidao.baidu.com/question/29752200.html
    我的问题就是这样的,我的程序是ANSI的,不符合Unicode标准,所以在英文的系统下任、仍然不能正确显示,要靠设置
    “Select a language to match the language version of the non-Unicode programs you want to use”才能显示,有没有可能将工程的一个窗口修改一下以符合Unicode标准?
      

  10.   

    给你 两个函数 楼主HRESULT ConvertCharToTChar(const char* pszInput,TCHAR**pptszOUtput)
    {
    int cchOutput = 0; if( NULL == pszInput || NULL == pptszOUtput )
    {
    return( E_INVALIDARG );
    }#ifdef UNICODE
    cchOutput = MultiByteToWideChar( CP_ACP, 0, pszInput, -1, NULL, 0 );
    if( 0 == cchOutput )
    {
    return( HRESULT_FROM_WIN32( GetLastError() ) );
    }
    #else
    cchOutput = strlen(pszInput)+1;
    #endif *pptszOUtput = new TCHAR[cchOutput];
    if( NULL == *pptszOUtput)
    {
    return( E_OUTOFMEMORY );
    }
    #ifdef UNICODE
    if( 0 == MultiByteToWideChar( CP_ACP, 0, pszInput, -1, *pptszOUtput, cchOutput ) )
    {
    if(*pptszOUtput )
    {
    delete *pptszOUtput;
    *pptszOUtput = NULL;
    } return( HRESULT_FROM_WIN32( GetLastError() ) );

    #else
    _tcscpy_s(*pptszOUtput,cchOutput,pszInput);
    #endif return S_OK;
    }
    上面这个函数可以讲char转化为多字节用法如:
    char *szName = "张三";
    TCHAR* tszName = NULL;
    ConvertCharToTChar(szName, &tszName);
    这样就能赚化为宽字节了。最后注意
    要 delete tszName;
      

  11.   

     wptrData1 = (wchar_t *)malloc((strlen(ptrData1)+1)*sizeof(wchar_t));
     memset( wptrData1, 0, (strlen(ptrData1)+1)*sizeof(wchar_t) ); 
     RC = (*CONVERTFILE_addr)( UTF82ANSI, ptrData1, wptrData1, strlen(ptrData1)+1 ) ;
     SetWindowTextW( hwndAnalyzeEdit1, wptrData1 ) ;
    我把字符转成宽字节的了,但是显示出来的中文还是问号,要靠设置
    “Select a language to match the language version of the non-Unicode programs you want to use”才能正确显示。是不是要调用setlocale( LC_ALL, "CHS" );?但我试下来没用