c++ string转utf8
时间: 2023-06-21 18:10:21 浏览: 155
c/c++ 字符集 gbk/utf8互转,Ansi/Utf8互转 纯c实现跨平台
5星 · 资源好评率100%
C++中的std::string本质上是一个char数组,它并不直接支持UTF-8编码。如果需要将std::string转换为UTF-8编码的字符串,则需要使用专门的库来进行转换。
一个流行的库是ICU,它是一个跨平台的国际化库,支持多种字符集转换操作。以下是一个使用ICU库将std::string转换为UTF-8编码的示例:
```c++
#include <unicode/ucnv.h>
#include <string>
std::string string_to_utf8(const std::string& input, const char* from_encoding)
{
UErrorCode error = U_ZERO_ERROR;
UConverter* conv = ucnv_open(from_encoding, &error);
if (U_FAILURE(error)) {
// 处理错误
}
std::string output;
int32_t input_length = static_cast<int32_t>(input.length());
int32_t output_length = input_length * 4; // 预估输出字符串长度
output.resize(output_length);
char* output_ptr = &output[0];
const char* input_ptr = input.c_str();
ucnv_convert(conv, &output_ptr, output_ptr + output_length, &input_ptr, input_ptr + input_length, nullptr, true, &error);
if (U_FAILURE(error)) {
// 处理错误
}
output.resize(output_ptr - &output[0]); // 调整字符串长度
ucnv_close(conv);
return output;
}
```
使用示例:
```c++
std::string input = "你好,世界!";
std::string output = string_to_utf8(input, "UTF-8");
```
注意,在使用ICU库之前,需要先安装ICU库并链接到项目中。
阅读全文