C++ std::string to utf-8
时间: 2023-11-15 16:05:19 浏览: 237
将C++的std::string转换为UTF-8编码可以使用以下代码:
```cpp
#include <locale>
#include <codecvt>
#include <string>
std::string to_utf8(const std::string& str) {
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wide_str = converter.from_bytes(str);
return std::string(wide_str.begin(), wide_str.end());
}
```
使用std::wstring_convert类可以方便地进行字符串编码转换。将std::string转换为std::wstring后,再用std::string构造函数将其转换为UTF-8编码的std::string。
相关问题
std::string to utf-8 编码
将 std::string 转换为 UTF-8 编码可以使用以下代码:
```cpp
#include <locale>
#include <codecvt>
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::string utf8_string = converter.to_bytes(wide_string);
```
其中,`wide_string` 是一个 `std::wstring` 类型的字符串,`utf8_string` 是转换后的 `std::string` 类型的字符串。
需要注意的是,此方法需要 C++11 支持。
windows下std::string怎么读取utf-8字符
在Windows下使用std::string读取UTF-8字符可以使用以下方法:
1. 使用MultiByteToWideChar函数将UTF-8编码转换为Unicode编码。
```c++
#include <Windows.h>
#include <string>
std::string utf8_to_string(const char* utf8_string)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8_string, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, utf8_string, -1, wstr, len);
std::wstring wstring(wstr);
delete[] wstr;
return std::string(wstring.begin(), wstring.end());
}
```
2. 使用iconv库进行编码转换。
```c++
#include <iconv.h>
#include <string>
std::string utf8_to_string(const char* utf8_string)
{
iconv_t conv = iconv_open("CP932", "UTF-8");
if (conv == (iconv_t)-1) {
// handle error
}
char* inbuf = const_cast<char*>(utf8_string);
size_t inbytesleft = strlen(utf8_string);
size_t outbytesleft = inbytesleft * 2; // assuming worst case
char* outbuf = new char[outbytesleft];
char* inbufp = inbuf;
char* outbufp = outbuf;
iconv(conv, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
std::string result(outbufp, outbuf - outbufp);
delete[] outbuf;
iconv_close(conv);
return result;
}
```
阅读全文