【问题标题】:C++ error too big for characterC++ 错误对于字符来说太大了
【发布时间】:2013-06-15 07:22:24
【问题描述】:

这是我得到的错误。 为了解释,我想打印根据http://www.endmemo.com/unicode/unicodeconverter.php的→字符

代码是 2192。但如果是这样,我可能使用了错误的代码,正确的打印方式是什么→。

int _tmain(int argc, _TCHAR* argv[])
{
    UINT oldcp = GetConsoleOutputCP();
    SetConsoleOutputCP(CP_UTF8);

    cout<<"\x2192"<<endl;

    SetConsoleOutputCP(oldcp);

    return 0;
}

【问题讨论】:

  • 在 UTF-8 中不是 2912

标签: c++ character utf


【解决方案1】:

您平台上的 char 是 8 位。您的代码部分 "\x2192" 尝试在其中放入 16 位。什么不适合,所以你会收到警告。

您可能指的是几个字符,例如"\x21\x92""\x92\x21"?这将创建一个带有两个字符(+ 0)的有效字符串。如果 cmets 正确,您仍然可以将其调整为正确的值。

【讨论】:

  • \x21\x92 给出了两个不同的符号,有什么建议可以让我的 char 超过 8 位或其他什么?
  • 你的片段暗示你的目标是 UTF-8。您应该阅读如何以 UTF-8 方式编码您的代码点。
  • 我已经阅读过,我遇到了死胡同或太复杂的方式。我再问一个问题,你认为打印出那个符号最简单的方法是什么?
【解决方案2】:

_tmainSetConsoleOutputCP的使用我猜你主要是关于Windows的。恐怕我对此知之甚少;希望对这个特定案例有更多了解的人会加入进来,但是这个程序会在我在这里使用 UTF-8 终端进行的快速测试中生成您正在寻找的输出。这是程序:

#include <iostream>

int main(void)
{
    std::cout << "\xE2\x86\x92" << std::endl;
    return 0;
}

示例输出:

$ make example && ./example
c++     example.cpp   -o example
→

我只是直接输出→字符的UTF-8编码。

等效地(至少对于 clang):

#include <iostream>

int main(void)
{
    std::cout << "→" << std::endl;
    return 0;
}

【讨论】:

  • std::cout
  • 是程序的错吗?或者你运行它的终端?
  • 我真的不知道...我对这个东西完全陌生
  • 抱歉 - 我对 Windows 一无所知。我知道我在这里的代码在 Mac OS X 上的 Unicode 感知终端和我在这里测试的 linux 机器上运行良好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 2019-07-29
  • 2012-07-22
  • 1970-01-01
相关资源
最近更新 更多