其实C/C++控制台程序无法cin中文的情况并不是你使用了string,string是能输入并保存中文的;
经过一番探究,我发现主要的问题是文件的编码和控制台所处的代码页(控制台的编码):
- 当代码文件编码为UTF-8,控制台编码为UTF-8时:控制台无法输入中文 ,但可以输出中文
- 当代码文件编码为GBK \; ,控制台编码为UTF-8时:控制台无法输入中文 ,也无法输出中文
- 当代码文件编码为UTF-8,控制台编码为GBK \; 时:控制台可以输入中文 ,但无法输出中文
- 当代码文件编码为GBK \; ,控制台编码为GBK \; 时:控制台可以输入中文 ,也可以输出中文
所以如果需要输入和输出中文的话就需要将代码源文件和控制台的编码都设置为GBK
源代码更改编码很容易,但是如何让代码设置控制台的编码呢:
- 使用DOS命令
chcp 936
设置控制台为GBK编码,chcp 65001
设置控制台为UTF-8编码 - 在C/C++中使用
system("chcp 936");
即可将控制台设置为GBK编码 - 要注意的是:如果你的控制台原来是UTF-8编码,然后你使用
chcp 936
设置为GBK编码,当你使用cls
命令时,会使得你的代码页回归原来的UTF-8编码(只在控制台应用程序运行时发现该问题,单独使用cmd运行时不会发生该问题)