2011-06-07 4 views
0

J'ai écrit un programme basé sur unicode avec libav et je veux faire un peu de fichier via libav avec le nom de fichier "中 .mp4".appel avio_open fonction avec nom de fichier non-anglais est invalide

ce nom de fichier n'est pas l'anglais, et quand j'appelle, la fonction renvoie un entier positif (ne pas échouer).

mais il y a "ѱ0.mp4" au lieu de "中 .mp4". (nom de fichier invalide.)

quel est le problème?

char * szFilenameA = 0; 

#ifdef _UNICODE 
    CSHArray<char> aFilenameBuffer; 
    aFilenameBuffer.Alloc(lstrlen(szFileName) * 2); 
    ZeroMemory(aFilenameBuffer, aFilenameBuffer.GetSize()); 
    WideCharToMultiByte(CP_ACP, 0, szFileName, lstrlen(szFileName), aFilenameBuffer, aFilenameBuffer.GetSize(), NULL, NULL); 
    szFilenameA = aFilenameBuffer; 
#else 
    szFilenameA = (TCHAR *)szFileName; 
#endif 

    ZeroMemory(m_pOutputFormatCtx->filename,1024); 
    _snprintf(m_pOutputFormatCtx->filename, strlen(szFilenameA), "%s", szFilenameA); 

    avio_open(&m_pOutputFormatCtx->pb, szFilenameA, AVIO_FLAG_WRITE) 

Répondre

2

enfin! c'est à cause du jeu de caractères.

convertir le nom de fichier ansi en UTF8 et puis cela fonctionne très bien.

int ANSIToUTF8(char *pszCode, char *UTF8code) 
{ 
    WCHAR Unicode[100]={0,}; 
    char utf8[100]={0,}; 

    // read char Lenth 
    int nUnicodeSize = MultiByteToWideChar(CP_ACP, 0, pszCode, strlen(pszCode), Unicode, sizeof(Unicode)); 

    // read UTF-8 Lenth 
    int nUTF8codeSize = WideCharToMultiByte(CP_UTF8, 0, Unicode, nUnicodeSize, UTF8code, sizeof(Unicode), NULL, NULL); 

    // convert to UTF-8 
    MultiByteToWideChar(CP_UTF8, 0, utf8, nUTF8codeSize, Unicode, sizeof(Unicode)); 
    return nUTF8codeSize; 
} 
Questions connexes