입력 옵션에 완벽하게 작동하는 간단한 코드가 있지만 ASCII 문자 만 포함되어 있지만 "오류 : 문자 변환에 실패했습니다"라는 오류 메시지가있는 예외가 발생합니다. . 해결책이 있습니까?옵션 문자열에 혼합 언어 문자가 포함되어있을 때 boost :: program_option :: store가 예외를 throw합니다.
배경 정보는 :
1. Compiler and OS: VC++2012 running on Windows 8.1 64 bit
2. "_UNICODE" option is ON It works with command like: tmain.exe --input
3. "c:\test_path\test_file_name.txt" It fails with command like:
tmain.exe --input "c:\test_path\test_file_name_中文.txt" My default
4. I am using boost v1.53.
5. locale is Australian English.
이 소스 코드입니다 : 내가 부스트 코드로 밟은
#include <boost/program_options.hpp>
int _tmain(int argc, _TCHAR* argv[])
{
try {
std::locale::global(std::locale(""));
po::options_description desc("Allowed options");
desc.add_options()
("input", po::value<std::string>(), "Input file path.")
;
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);
if (vm.count("input")) {
std::cout << "Input file path: " << vm["input"].as<std::string>();
}
return 0;
}
catch(std::exception& e) {
std::cerr << "error: " << e.what() << "\n";
return 1;
}
catch(...) {
std::cerr << "Exception of unknown type!\n";
}
return 0;
}
및 예외가이 기능 (boost_1_53_0 \ libs와 \에서 던진 것을 발견 program_options \ src \ convert.cpp) :
BOOST_PROGRAM_OPTIONS_DECL std::string
to_8_bit(const std::wstring& s,
const std::codecvt<wchar_t, char, std::mbstate_t>& cvt)
{
return detail::convert<char>(
s,
boost::bind(&codecvt<wchar_t, char, mbstate_t>::out,
&cvt,
_1, _2, _3, _4, _5, _6, _7));
}
부스트 코드를 사용할 때 ou 이 문장
boost::program_options::parse_command_line(argc, argv, desc)
실제로 잘 작동 t, 그것은 UTF-8로 다시 형식 wstring에 문자열을 변환하는 데 실패 부스트 :: program_options : 저장() 함수입니다. 이 오류의 원인은 현재 코드 페이지가 비 ASCII 문자를 지원하지 않기 때문일 수 있습니다. 내 현재 로케일이 중국어 기반이라면 내 코드가 잘 작동 할 것입니다. 내 문제에 대한 해결책이 있습니까? 미리 감사드립니다.
프로그램 이름과 별도의 인수없이 프로그램을 실행하면 '문자 변환에 실패했습니다.'라는 메시지가 표시됩니다. – Victor