【问题标题】:How to output Unicode characters from hex string in C++?如何在 C++ 中从十六进制字符串输出 Unicode 字符?
【发布时间】:2023-03-17 12:08:02
【问题描述】:

我有一个名为 str 的字符串,其中包含十六进制代码 265A,我想将其输出为 Unicode 字符,它应该是黑棋王。

所以这些是我已经尝试过的方法:

std::string str = "\u" + str;
std::cout << str;

但这给了我错误

error: incomplete universal character name \u

在做

std::cout << "\u" << str;

也没有工作,出于同样的原因。

所以我尝试像这样使用wchar_t

wchar_t wc = strtol(str.c_str(), NULL, 16);
std::wcout << wc;

但这只是没有输出任何东西。

所以我真的不知道还能做什么。

【问题讨论】:

  • 你想要哪种编码?
  • 前两个不起作用,因为\u 是编译时操作,而不是运行时操作。您需要提供有关第三种情况发生的情况的更多信息。 wc 的值是多少?有没有可能您的wcout 根本不支持该字符?
  • 呵呵,我没想到。我现在尝试使用 UTF8 进行编码,而在 Windows 中,我只是在执行std::cout &lt;&lt; "\u265A" 时得到奇怪的字符,即♚。我得读一点。但是一些适用于 Windows 的编码。 @比芬
  • 嗯,问题是,除了std::wcout,我不知道有什么其他方法可以检查wc 的值,但是strtol 的文档建议它应该做什么它应该这样做。另外,您的意思是,无法输出? 265A 相当高,所以这可能是一种可能性,但我该如何绕过它呢? @RaymondChen
  • @kim366 你在说什么?那时你甚至不知道调试器是什么..

标签: c++ unicode hex


【解决方案1】:

您的strtol 方法是正确的。以下测试程序测试您可以通过这种方式创建A

#include <string>
#include <cstdlib>
#include <iostream>

int main()
{
    const std::string str = "41";

    wchar_t wc = std::strtol(str.c_str(), NULL, 16);
    std::wcout << wc << std::endl;
}

您可能在输出方面遇到问题,或者您系统的 wchar_t 是某种非 Unicode 类型 - 您可以使用类似的东西来证明这一点

std::wcout << wchar_t(65) << wchar_t(0x265A) << std::endl;

【讨论】:

    猜你喜欢
    • 2020-03-25
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2019-07-27
    相关资源
    最近更新 更多