12 const iconv_t conv_desc = iconv_open(
"ISO-8859-1//TRANSLIT",
"UTF-8");
13 if (conv_desc ==
reinterpret_cast<iconv_t
>(-1)) {
14 throw std::runtime_error(
"iconv_open failed");
17 size_t in_bytes_left = utf8_str.size();
18 size_t out_bytes_left = in_bytes_left;
19 std::vector<char> output_buffer(out_bytes_left);
20 char* in_buf =
const_cast<char*
>(utf8_str.data());
21 char* out_buf = output_buffer.data();
23 if (iconv(conv_desc, &in_buf, &in_bytes_left, &out_buf, &out_bytes_left) ==
static_cast<size_t>(-1)) {
24 iconv_close(conv_desc);
25 throw std::runtime_error(
"iconv conversion failed");
28 std::string result(output_buffer.data(), output_buffer.size() - out_bytes_left);
29 iconv_close(conv_desc);