CStringW (ATL ) und Winapi CopyFileW



  • Eine Frage,

    im CStringW werden Umlaute korrekt ausgegeben, verwende ich CopyFileW oder CopyFile wird aus ä = ö.

    Was tun?



  • Was hat das eine mit dem anderen zu tun?



  • Na ich übergebe den CStringW an CopyFileW, der erzeugte Filename hat dann die Änderung bei Sonderzeichen.
    Lt. MSDN Lib. sind aber die Umlaute in Filenamen möglich.



  • Mach mal bitte ein Beispiel...



  • Wenn im Bildnamen oder Benutzernamen ein Umlaut ist, wird z.B. ä = ö.
    Einige Umwandlungen von CStringA zu CStringW sind erforderlich, da einige Funktionen z.B GetPhysicalPath() einen CStringA zurückgeben.

    Wenn ich direkt vor Copy den String ausgeben lasse ist er korrekt mit allen Umlauten.

    POSITION pos;
    		LPCSTR varname;
    		bool update = false;
    
            CStringA mystr;
            this->m_HttpRequest.GetPhysicalPath(mystr);
    
    		pos = Files.GetStartPosition();
    
    while (pos != NULL)
    		{
    
                IHttpFile* pFile = Files.GetNextValue(pos);
    	          if (pFile->GetFileSize() > 0)
                {   
    
                   	CStringW myWstr = CA2W(mystr);
                    myWstr.Append(_T("img\\"));
                    myWstr.Append(CA2W(m_valueName));
    				myWstr.Append(CA2W(pFile->GetFileName()));
                    m_HttpResponse << myWstr;
                   if (!CopyFileW(CA2W(pFile->GetTempFileName()), myWstr, true))
                    {
                        if(GetLastError()==80) this->m_HttpResponse << "Bild mit dem Namen existiert schon";
                        else this->m_HttpResponse << myWstr << " Fail, Error Code= " << GetLastError ;
                    }
                   else update = true;
                   this->m_HttpResponse << pFile->GetFileName()<< " wurde hochgeladen. <br /> ";
                }
                else
                {
    
    			// Get the next file
    			pos = m_HttpRequest.GetNextFile(pos, &varname, &pFile);
                }
            }
    

  • Mod

    Das liegt an der Umwandlung von ANSI auf Unicode.
    Welche Codepageist denn eingestellt. Diese beeinflusst die Umwandlung von Sonderzeichen immens.



  • Danke für die Info.

    UTF-8 hab ich im Projekt eingestellt, werde da mal dran rumtesten.


  • Mod

    Es geht nich um das Projekt. Es geht um den Prozess, wenn die MSBC Strings in Unicode umgewandelt werden...



  • Dean schrieb:

    TF-8 hab ich im Projekt eingestellt, werde da mal dran rumtesten.

    Wo kann man denn in VS UTF-8 einstellen????



  • Im SRF File = {{codepage utf-8}}
    Im Projekt Unicode
    Für die HTML Ausgabe auch utf-8

    Egal wie ich es drehe mit den Codepages mit den Umlauten bleibt es schwierig.



  • Ich glaube wir reden von verschiedenen Dingen...

    Mit den Umlauten ist es nie schwierig, wenn man die Encodings beachtet...
    Ich gehe aber davon aus, dass Du in Deinem Source-Code keine Umlaute hast; das wäre wieder eine ganz andere Geschichte...


Anmelden zum Antworten