您必须使用 Unicode 来指定要显示的字符。控制台中由字节表示的字符02h
由代码页 437 ( cp437 ) 转换为 Unicode 字符U+263B
。使用以 UTF-8 保存的带有 BOM 的源文件可以更轻松地使用 Unicode,因为您可以粘贴或键入所需的字符,而无需使用 Unicode 转义码。
对于文件流,需要将流配置为 UTF-8。有多种方法可以做到这一点,这取决于编译器,但使用 Visual Studio 2012,源代码保存在 UTF-8 w/BOM 中,还有一些谷歌搜索:
#include <locale>
#include <codecvt>
#include <fstream>
#include <iostream>
#include <io.h>
#include <fcntl.h>
using namespace std;
int main()
{
const std::locale utf8_locale = std::locale(std::locale(), new std::codecvt_utf8<wchar_t>());
wofstream f(L"sample.txt");
f.imbue(utf8_locale);
f << L"\u263b我是美国人。我叫马克。" << endl;
_setmode(_fileno(stdout),_O_U16TEXT);
wcout << L"\u263b我是美国人。我叫马克。" << endl;
}
sample.txt
在记事本中查看的内容:
☻我是美国人。我叫马克。
十六进制转储(正确的 UTF-8):
E68891E698AFE7BE8EE59BBDE4BABAE38082E68891E58FABE9A9ACE5858BE380820D0A
输出到控制台剪切并粘贴在这里。没有正确字体的每个汉字的视觉显示是�,但字符显示正确粘贴到 SO 或记事本中。
☻我是美国人。我叫马克。