在c ++ charcaters中存储unicode

时间:2017-11-19 08:43:25

标签: c++ unicode char

c++中的

1 byte内容为unicode,但大多数2 bytes个字符需要unicode。 这是否意味着characters无法存储在c++的{​​{1}}中?

4 个答案:

答案 0 :(得分:1)

没有char不是唯一的。如果你在Windows上有wchar_tWCHAR)或者通常认为short也是2字节,但它更多地是关于你想要实现和使用的方式它,协议ex:

#if !defined(_NATIVE_WCHAR_T_DEFINED)
typedef unsigned short WCHAR;
#else
typedef wchar_t WCHAR;
#endif

WCHAR* strDemo = L"consider the L";

但你需要在网上挖掘更多内容。它们也被称为多字节字符串,因此请在搜索中考虑。

例如:

像更普遍的老式跨平台BSD方式一样:

https://www.freebsd.org/cgi/man.cgi?query=multibyte&apropos=0&sektion=0&format=html

  

http://utf8everywhere.org。并且不要错过这个

也是因为你在第一时间提出这个问题我认为你应该知道 boost

答案 1 :(得分:1)

C,C ++还支持用于unicode utf-16的16位字符类型wchar_t

通常通过宏定义WCHARTCHAR

您可以强制使用16位字符文字/源代码常量:

wchar_t c = L'a';

和16位字符串相同:

wchar_t[256] s = L"utf-16";

答案 2 :(得分:1)

首先,你必须要知道有一些叫做编码的东西。 因此,有多种方法可以表示非ASCII字符。

现在最流行的编码是UTF-8,它将单个非ASCII字符表示为多个字节2-4。在此编码中,您无法将此类字符存储在单个char变量中。

还有其他编码,其中非ASCII字符的小子集表示为单字节,例如ISO 8859-2。编码由区域设置定义,Windows更喜欢这种编码,这就是Java Rookie回答有机会为您工作的原因。 其他系统通常使用UTF-8作为std::string,因此单个字符可由多个字节表示。

另一种方法是使用wchar_t wstring wcout wcin,请注意仍有some issues

答案 3 :(得分:0)

要表示角色,您可以使用通用角色名称(UCN)。字符'ф'的Unicode值为U + 0444,因此在C ++中您可以将其写为'\u0444''\U00000444'。此外,如果源代码编码支持此字符,那么您可以在源代码中直接编写它。

// both of these assume that the character can be represented with
// a single char in the execution encoding
char b = '\u0444';
char a = 'ф'; // this line additionally assumes that the source character 
              // encoding supports this character

打印此类字符取决于您要打印的内容。如果您要打印到Unix终端仿真器,终端仿真器正在使用支持该字符的编码,并且该编码与编译器的执行编码匹配,那么您可以执行以下操作:

#include <iostream>

int main() {
    std::cout << "Hello, ф or \u0444!\n";
}

您也可以使用wchar_t