.NET System::String to std::string

本文关键字:std string to String System NET | 更新日期: 2023-09-27 17:57:15

all,我正在使用C++/CLI编写Winform。我的操作系统语言是中文。我从openfiledialog获取System::String,并使用.NET将System::String转换为UTF8编码,最后我使用StringToHGlobalAnsi将其转换为std::string。

但是,如果我打开中文命名的视频,并将其输入到ffmpeg,ffmpeg可以正确打开视频。但是当我打开韩国命名视频时,ffmepg 无法打开视频。有谁知道如何打开与操作系统语言不同的不同语言的视频?

.NET System::String to std::string

谢谢你们!我听从卢卡斯的建议。这是可以打开不同语言视频文件名的代码。

我的原生 dll API:

OpenVideo(char* video_path);

我在 C++/CLI 中的代码:

System::String^ multi_language_str = str_from_openfile_dialog;
const wchar_t* wstr_file_name = (const wchar_t*)(Marshal::StringToHGlobalUni(multi_language_str)).ToPointer();
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> converter;
std::string str_file_name = converter.to_bytes(wstr_file_name);
OpenVideo(str_file_name.c_str());
Marshal::FreeHGlobal((IntPtr)(void*)wstr_file_name);

我认为你最好使用它,它管理资源的麻烦更少,并且由于pin_ptr的析构函数而更加异常安全:

array<unsigned char>^ bytes = System::Text::Encoding::UTF8::GetBytes(str_from_openfile_dialog + L''0');
cli::pin_ptr<unsigned char> pinned = &bytes[0];
const unsigned char * puString = pinned;
OpenVideo(static_cast<const char *>(puString));