# 测试C++字符串在GBK环境下的乱码情况

当然可以将终端编码类型改为`UTF-8`来实现通用情况,但是更多的情况下,`windows`终端因为各种原因只能使用`GBK`的环境不能更改他的编码,因此有此测试,当然测试也可能包含输出不为`GBK`的情况用于参考或者记录。

**注:** 源码编码统一为`UTF-8`,如果是`MSVC`均为使用`/source-charset:utf-8`实现输出为`GBK`。

## std::string

| 可用性 | 编译器  | 是否使用了u8 | 测试环境  | 源码编码 | 输出编码 | 控制台编码/是否乱码 | 调试器是否乱码           |
| ------ | ------- | ------------ | --------- | -------- | -------- | ------------------- | ------------------------ |
|        | MinGW64 | 否           | VSCode    | UTF-8    | GBK      | GBK,正常           | 不识别其内容是`\326`形式 |
|        | MinGW64 | 否           | VSCode    | UTF-8    | UTF-8    | GBK,乱码           | 正常                     |
|        | MinGW64 | 是           | VSCode    | UTF-8    | UTF-8    | GBK,乱码           | 正常                     |
| √      | MSVC    | 否           | VSCode    | UTF-8    | GBK      | GBK,正常           | 正常                     |
|        | MSVC    | 是           | QtCreator | UTF-8    | GBK      | GBK,乱码           | 正常                     |
|        | MSVC    | 否           | QtCreator | UTF-8    | GBK      | GBK,正常           | 乱码                     |

## QString

`Qt6`删除库配置中的`-utf-8`选项才行,否则输出为`UTF-8`。

| 可用性 | 编译器 | 是否使用了u8 | 测试环境  | 源码编码 | 输出编码 | 控制台编码/是否乱码 | 调试器是否乱码 |
| ------ | ------ | ------------ | --------- | -------- | -------- | ------------------- | -------------- |
| √      | MSVC   | 是           | VSCode    | UTF-8    | GBK      | GBK,正常           | 正常           |
| √      | MSVC   | 是           | QtCreator | UTF-8    | GBK      | GBK,正常           | 正常           |
|        | MSVC   | 否           | QtCreator | UTF-8    | GBK      | GBK,乱码           | 乱码           |
|        | MSVC   | 否           | VSCode    | UTF-8    | GBK      | GBK,乱码           | 乱码           |