相关疑难解决方法(0)

如何从Windows上的c ++控制台应用程序打印UTF-8

对于在英语Windows(XP,Vista或7)上使用Visual Studio 2008编译的C++控制台应用程序.是否可以打印到控制台并使用cout或wcout正确显示UTF-8编码的日语?

c++ utf-8 console-application

19
推荐指数
4
解决办法
3万
查看次数

Windows控制台上的UTF-8输出

以下代码显示了我的计算机上的意外行为(在Windows XP和Windows 7上的VS 2012上使用Visual C++ 2008 SP1进行了测试):

#include <iostream>
#include "Windows.h"

int main() {
    SetConsoleOutputCP( CP_UTF8 );
    std::cout << "\xc3\xbc";
    int fail = std::cout.fail() ? '1': '0';
    fputc( fail, stdout );
    fputs( "\xc3\xbc", stdout );
}
Run Code Online (Sandbox Code Playgroud)

我简单编译了cl /EHsc test.cpp.

Windows XP:控制台窗口中的输出 ü0ü(转换为代码页1252,最初显示默认代码页中的一些线条图,可能是437).当我更改控制台窗口的设置以使用"Lucida Console"字符集并再次运行我的test.exe时,输出更改为,这意味着

  • ü可以使用fputsUTF-8编码来编写字符C3 BC
  • std::cout 因任何原因都不起作用
  • failbit尝试写字符后,流设置

Windows 7:使用Consolas输出??0ü.更有趣.可能写入正确的字节(至少在将输出重定向到文件时)并且流状态正常,但这两个字节被写为单独的字符).

我试图在"Microsoft Connect"(见这里)上提出这个问题,但是MS并没有太大的帮助.你可以在这里看一下 以前曾经问过类似的东西.

你能重现这个问题吗?

我究竟做错了什么?不应该std::coutfputs有相同的效果?

解决:(排序)继mike.dld的想法,我实现了一个std::stringbuf …

c++ console windows-xp utf-8 visual-studio-2008

7
推荐指数
2
解决办法
4965
查看次数

"cout"无法使用汉字

我的代码就像这些一样简单:

#include <iostream>
using namespace std;
//Some codes here...
bool somefunction(){
    cout<<"???";
    return false;
}
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

error C2143: syntax error: missing ';' before 'return';
error C2001: newline is constant;

而且,如果我"???"换成像"细胞"这样的英文版,那就完美了;

c++ cout character

2
推荐指数
1
解决办法
2861
查看次数

如何在C中打印Box字符(Windows)

如何在C中打印em dash?

其中之一: -

每当我这样做:printf("—")我只是ù在终端得到一个.

谢谢.

编辑:下面的代码应该打印出一个Xs和一个Os看起来网格与em破折号的水平线.

int main ()
{
    char grid[3][3] = {{'a', 'a', 'a'}, {'a', 'a', 'a'}, {'a', 'a', 'a'}};

    int i, j;

    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (j != 0)
            {
                printf("|");
            }
            printf("  %c  ", grid[i][j]);
        }
        if (i != 2)
        {
            printf("\n——————————————\n");
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:("ù"应为" - "s)

  a  |  a  |  a
ùùùùùùùùùùùù …
Run Code Online (Sandbox Code Playgroud)

c windows unicode special-characters

1
推荐指数
1
解决办法
1531
查看次数

C++ wcout utf-16编码的char数组如何?

我正在阅读有关 string 和 wstring 的众所周知的答案,并出现一些困惑。

\n\n

源字符集和执行字符集均设置为utf-8,Windows x64,VC++编译器,git bash控制台(可以打印unicode字符),系统默认代码页936(GB2312)。

\n\n

我的专业代码:

\n\n
#include <cstring>\n#include <iostream>\nusing namespace std;\nint main(int argc, char* argv[])\n{\n    wchar_t c[] = L"ol\xc3\xa9";\n    wchar_t d[] = L"abc";\n    wcout << c << endl;\n    wcout << d << endl;\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

可以打印“abc”,但无法打印“\xc3\xa9”。

\n\n

据我所知,它wchar_tL前缀字符串文字一起使用。而在Windows下wchar_t是用UTF-16编码的(这是硬编码的吧?无论我选择什么源字符集或执行字符集,L"abc"总是有相同的UTF-16代码单元)。

\n\n

问题是\xef\xbc\x9a怎么可能是wcoutUTF-16编码的字符串(“abc”),而我的源文件是utf-8,执行字符集是utf-8。除非我将所有内容都设置为 utf-16,否则该程序应该无法识别 UTF-16 编码的内容。

\n\n

如果它可以以某种方式打印 UTF-16,那为什么它不能打印呢\xc3\xa9

\n

c++ encoding

1
推荐指数
1
解决办法
3539
查看次数