トップ回答者
WideCharToMultiByteを使うとアジア圏の言語だと?になる問題を回避したい

質問
-
開発環境は VisualStudio2019 VC++MFC です。 (対象OSはWindows10以降)
最終的な目標は使っているffmpegの関数avformat_open_inputのファイル名に char *を渡す事です。
プログラムはUnicodeにしている為、現状はファイル名が入っているCStringを
WideCharToMultiByteで charに変換してavformat_open_inputに渡しています。
これだとCStringに中国語やハングル語などが入っているとそこだけ ? になります。テストコード
char pszText[8][1024]; CString strTest[] = { // 特殊文字 _T("C:\\TEST\\℡ ㊤ ㊥ ㊦-0515.mpg"), _T("C:\\TEST\\㌍ ㌦ ㌣ ㌫.mpg"), // ハングル _T("C:\\TEST\\안녕하세요-0515.mpg"), _T("C:\\TEST\\各種動画\\안녕하세요-0515.mpg"), // 中文 _T("C:\\TEST\\测试文件.MOV"), _T("C:\\我学习汉语.mp4"), // ベトナム _T("C:\\TEST\\Nhật Bản.mpg"), _T("C:\\TEST\\người yêu .mpg"), }; for ( int i = 0; i < 8; i++ ) WideCharToMultiByte(CP_ACP, 0, strTest[i], -1, pszText[i], 1024, NULL, NULL);
どこの国でも使えるようにする必要があるので、
言語に関係なく、 CStringから char *に変換する方法がありましたらご教授ください。
(とりあえずはコードの3国だけでも)
よろしくお願いします。
回答
-
AVFormatContextを使用する方法が提供されているようですね。
https://mw.gl/posts/ffmpeg_custom_io/
https://gist.github.com/xlphs/9895065#file-myiocontext-cpp-L59
ここではfopenを使っていますが、代わりに_wfopenを使えばUTF-16のパスを扱えます。
- 回答としてマーク Freeプログラマー 2022年6月15日 4:20
すべての返信
-
AVFormatContextを使用する方法が提供されているようですね。
https://mw.gl/posts/ffmpeg_custom_io/
https://gist.github.com/xlphs/9895065#file-myiocontext-cpp-L59
ここではfopenを使っていますが、代わりに_wfopenを使えばUTF-16のパスを扱えます。
- 回答としてマーク Freeプログラマー 2022年6月15日 4:20
-
AVFormatContextを使用する方法が提供されているようですね。
https://mw.gl/posts/ffmpeg_custom_io/
https://gist.github.com/xlphs/9895065#file-myiocontext-cpp-L59
ここではfopenを使っていますが、代わりに_wfopenを使えばUTF-16のパスを扱えます。
ありがとうございました。