我一直在尝试为一个项目编写 C++ 应用程序,但遇到了这个问题。基本上:
class OBSClass
{
public:
wstring ClassName;
uint8_t Credit;
uint8_t Level;
OBSClass() : ClassName(), Credit(), Level() {}
OBSClass(wstring name, uint8_t credit, uint8_t hyear)
: ClassName(name), Credit(credit), Level(hyear)
{}
};
在其他一些文件中:
vector<OBSClass> AllClasses;
...
AllClasses.push_back(OBSClass(L"Bilişim Sistemleri Mühendisliğine Giriş", 3, 1));
AllClasses.push_back(OBSClass(L"İş Sağlığı ve Güvenliği", 3, 1));
AllClasses.push_back(OBSClass(L"Türk Dili 1", 2, 1));
... (rest omitted, some of entries have non-ASCII characters like 'ş' and 'İ')
我有一个函数基本上输出所有内容AllClasses
,问题是 wcout 没有按需要输出。
void PrintClasses()
{
for (size_t i = 0; i < AllClasses.size(); i++)
{
wcout << "Class: " << AllClasses[i].ClassName << "\n";
}
}
输出是'Class:Bili',没有别的。程序甚至不尝试输出其他条目而只是挂起。我在使用 G++ 6.3.0 的 Windows 上。而且我没有使用 Windows 的 cmd,我使用的是 mingw 的 bash,所以编码不会有问题(或者不是吗?)。有什么建议吗?
编辑:源代码编码也不是问题,只是检查它是UTF8,VSCode的默认值
编辑:也只是检查了字符串文字是否有问题。
wstring test;
wcin >> test;
wcout << test;
输入一些非 ASCII 字符,如 'ö' 和 'ş',效果很好。宽字符串文字有什么问题?
编辑:给你
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<wstring> testvec;
int main()
{
testvec.push_back(L"Bilişim Sistemleri Mühendisliğine Giriş");
testvec.push_back(L"ıiÖöUuÜü");
testvec.push_back(L"☺☻♥♦♣♠•◘○");
for (size_t i = 0; i < testvec.size(); i++)
wcout << testvec[i] << "\n";
return 0;
}
使用 G++ 编译:g++ file.cc -O3
此代码仅输出“Bili”。一定是g++搞砸了二进制编码(?),因为输入值wcin
然后输出它们wcout
不会产生任何问题。