【问题标题】:C++ unicode (or wstring?) equivalent for (char)C ++ unicode(或wstring?)等效于(char)
【发布时间】:2013-04-02 11:28:26
【问题描述】:

谁能告诉我“(char)”的 Unicode 等价物是什么?

对于 ASCII 我一直使用的例子

 (char)(7)

现在我也想做同样的事情,但要使用 Unicode。

但是

 (wchar_t)(7)

没有成功,wchar 不存在。

我想将这个(可能的)Unicode 字符传递给一个接受 wstring 的函数。

或者换句话说: 如何以编程方式从 unicode 字符值(例如 TAB 的 7)创建 wstring?

【问题讨论】:

  • 你能显示一些代码吗?这些片段不是很有用
  • “没有解决”不足以描述问题。我认为没有人知道您要做什么。
  • C++ 不支持 ASCII 的 IIRC,但在 C++11 中 char 必须能够存储 8 位 UTF-8 代码单元;还有 char16_t 和 char32_t (分别至少有 16 位和 32 位)。请注意,单个字形可以由多个 UTF-8/-16 代码单元表示,因此不完全等同于将 char 解释为 ASCII 字符。
  • 我不知道什么是“ASCII 感知”,但这对我来说完全没用。在任何情况下,C++ 都知道脚注 14 中的 ASCII。
  • char 的 C++ unicode 等效项是,....char。 utf8everywhere.org

标签: c++ unicode


【解决方案1】:

我想将这个(可能的)Unicode 字符传递给接受wstring 的函数。

然后你需要创建一个wstring,就像如果你需要将一个ASCII字符传递给一个接受string的函数,你必须从char创建一个string

function(std::wstring(1, 7)); // length 1, filled with value 7

【讨论】:

    【解决方案2】:

    内存中的数据不以 Unicode 格式存储。 Unicode 为计算机上使用的每个(嗯,很多)字符提供了一个唯一编号。

    在内存中,字符被编码:将字节值映射到 Unicode 数字。

    你用的是什么编码?

    • UTF-8:每个字符都映射到 1、2、3、4、5 或 6 字节序列。
    • UTF-16:每个字符都映射到一个 2 或 4 字节序列。
    • UCS-2:大多数字符到 2 字节序列的不完整映射。
    • UTF-32:每个字符映射到一个 4 字节序列。

    win32 中的 wchar_t 是 16 位的,字符应该在 UCS-2 UTF-16 中编码。

    大多数 *NIX 上的 wchar_t 是 32 位的,字符应以 UTF-32 编码。

    更新

    呵呵,看来我老了。我的最后一部作品是在 VS2005 中,仍然有提到 UCS-2 作为内部编码,但我想即使那已经过时了。

    【讨论】:

    • 哇,你是时间旅行者吗?如果不是,你为什么要谈论上个千年的行为? Windows 使用 UTF-16 已经有“一段时间”了。
    • 函数的 Windows SDK 可能期望 wchar_t-strings 被编码,但我认为他们更希望它们以 UTF-16 编码。
    • UTF-16 用于 Microsoft Windows 2000/XP/2003/Vista/CE 中的 OS API 中的文本。较旧的 Windows NT 系统(Windows 2000 之前)仅支持 UCS-2。
    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多