“cout”无法正常输出中文字符

3

我的代码就像这样简单:

#include <iostream>
using namespace std;
//Some codes here...
bool somefunction(){
    cout<<"单元格";
    return false;
}

我得到的错误信息如下:

error C2143: 语法错误:在 'return' 之前缺少 ';';
error C2001: 换行符是常量;

此外,如果我将"单元格"更改为英文版本,如"cell",它可以完美运行;


我认为你的编译器无法理解你的源文件是使用哪种编码方式的。 - Lily Ballard
1
你期望发生什么事情?你期望一个多字节字符串吗?还是你期望编译器输出一个UTF-8字符串? - David Schwartz
2
请尝试使用 std::wcout - StoryTeller - Unslander Monica
4个回答

5
编译器错误表明您的编译器不支持源代码中的Unicode字符。您需要对它们进行转义,使用宽字符常量和wcout
wcout << L"\x5355\x5143\x683c";

如果您需要以特定编码(例如gb2312)输出字符,请在字符串文字中使用该编码:
cout << "\xb5\xa5\xd4\xaa\xb8\xf1"; // string encoded with GB2312

1

若要处理非英语字符集,应使用std::wcout来打印宽字符,如下所示:

#include <iostream>
using namespace std;
//Some codes here...
bool somefunction(){
  wcout<< L"单元格";
  return false;
}

同时确保在同一个程序中不要混用coutwcout


1
据我所知,不是这样的 :) 只是在这个地球的这个时候.. 呵呵 - StoryTeller - Unslander Monica
2
在这种情况下,使用 cout 还是 wcout 并不重要。代码无法编译,因为编译器无法处理给定字符集中的该字符串。 - David Rodríguez - dribeas

0

你应该始终将源代码保存为带有BOM的UTF-8格式。


0

使用wcout和Unicode字面量(L"单元格")。即使您只处理英文字符,这也是一个好习惯。还要使用wstring。

编辑:实际上,另一个问题可能是您将文件存储在非Unicode编码中,因此字符丢失。告诉您的编辑器将文件存储为Unicode。

另一个问题可能是控制台(或wcout)无法正确显示Unicode字符。如果您在消息框中显示它们(使用MessageBoxW),则它们将被正确显示。


1
宽字符字符串(L"")不一定是Unicode。取决于操作系统、编译器等。 - André Caron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接