none
mbcs程序中用CFileDialog 选择一文件名中有朝鲜语和中文的文件, 打开时返回出乱码 RRS feed

  • 问题

  • mbcs多字节程序中用mfc的CFileDialog 选择一文件,名中有朝鲜语和中文的文件, 返回的文件名中朝鲜文显示乱码,把这个转成unicode,仍不正确,我应该如何操作,难道只能把项目改成UNICODE,这可改动太大了.
    CFileDialog dlg(TRUE, NULL, NULL, flag, szFilter);
    if(dlg.DoModal() == IDOK)
    {
      POSITION pos = dlg.GetStartPosition();
      while(pos)
      {
        CString strPath = dlg.GetNextPathName(pos);//文件名中可能有朝鲜语、日文\中文

         char pszfilename[MAX_PATH];
         memset(pszfilename, 0, MAX_PATH);
         strcpy(pszfilename, strPath);

         DWORD dwMinSize, dwSize;

         dwMinSize = MultiByteToWideChar (CP_ACP, 0, pszfilename, -1, NULL, 0);//此处仍显示为乱码

         WCHAR   szwFileName[MAX_PATH] ;    
         MultiByteToWideChar (CP_ACP, 0, pszfilename, -1, szwFileName, dwMinSize);

         HANDLE m_hFile = CreateFileW(szwFileName, GENERIC_READ,
          FILE_SHARE_READ | FILE_SHARE_WRITE,
          NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL );

         if ( INVALID_HANDLE_VALUE == m_hFile )
          throw 0;//每次都不能创建成功,原来是文件名中的朝鲜语显示为?故抛出123号错误
         
      }
    }

    2009年3月19日 8:12

答案

全部回复

  • 你可以临时调用Unicode API,传递Unicode类型的参数,但是你怎么处理获得的unicode文件名?
    MSMVP VC++
    2009年3月19日 16:34
    版主
  •  文件里面的内容是MBCS的只不过文件名是UNICODE,我只要能打开文件就行了,因为我把文件名改了我的程序就可打开这个文件.
    关键是CFileDialog里没有UNICODE的API呀,返回是CString,为了这个问题我要把项目都改为UNICODE吗.?我怎样才能从MBCS的项目中的CFileDialog得到UNICODE的.
    CString CFileDialog::GetNextPathName(),没有UNICODE版本的呀,
    2009年3月20日 1:09
  • GetOpenFileNameW
    MSMVP VC++
    2009年3月20日 2:25
    版主