C++string 中文显示乱码
时间: 2023-07-24 17:40:47 浏览: 129
C++中的string类型默认使用的是ASCII编码,而中文字符使用的是Unicode编码,因此如果直接将中文字符存储到string中,就会出现乱码问题。解决方法如下:
1. 使用wstring类型代替string类型,wstring是宽字符类型,支持Unicode编码。例如:
```c++
#include <iostream>
#include <string>
using namespace std;
int main()
{
wstring str = L"你好,世界!";
wcout << str << endl;
return 0;
}
```
2. 将中文字符转换为ASCII编码的字符串,例如使用UTF-8编码时,可以使用iconv库进行转换,示例如下:
```c++
#include <iostream>
#include <string>
#include <iconv.h>
using namespace std;
string utf8_to_ascii(const string& utf8_str)
{
iconv_t cd = iconv_open("ASCII//TRANSLIT", "UTF-8");
if (cd == (iconv_t)-1) {
cerr << "iconv_open failed" << endl;
return "";
}
size_t in_len = utf8_str.size();
size_t out_len = in_len * 3; // ASCII编码一个字符最多占用3个字节
char* out_buf = new char[out_len + 1];
char* in_buf = const_cast<char*>(utf8_str.c_str());
char* out_ptr = out_buf;
if (iconv(cd, &in_buf, &in_len, &out_ptr, &out_len) == (size_t)-1) {
cerr << "iconv failed" << endl;
delete[] out_buf;
iconv_close(cd);
return "";
}
*out_ptr = '\0'; // 手动添加字符串结束符
string result(out_buf);
delete[] out_buf;
iconv_close(cd);
return result;
}
int main()
{
string str = "你好,世界!";
string ascii_str = utf8_to_ascii(str);
cout << ascii_str << endl;
return 0;
}
```
以上是两种解决方案,可以根据实际情况选择。
阅读全文