gpt4 book ai didi

c++ - 使用非英文文件名调用 avio_open 函数无效

转载 作者:行者123 更新时间:2023-11-28 03:49:00 24 4
gpt4 key购买 nike

我一直在用 libav 编写基于 unicode 的程序,我想通过 libav 制作一些文件名为“中.mp4”的文件。

这个文件名不是英文,当我调用时,函数返回正整数(不会失败)。

但是有“ѱ0.mp4”而不是“中.mp4”。 (无效的文件名。)

怎么了?

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)

最佳答案

终于!这是因为字符集。

将 ansi 文件名转换为 UTF8,然后就可以正常工作了。

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;
}

关于c++ - 使用非英文文件名调用 avio_open 函数无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6265555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com