将 Unicode 存储在 C++ 字符中



c++中的char具有1 byte的记忆,但大多数unicode字符都需要2 bytes。这是否意味着unicode不能存储在c++ characters中?

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

#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

C,C++也支持用于Unicode UTF-16的16位字符类型wchar_t

通常通过宏定义WCHARTCHAR

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

wchar_t c = L'a';

与 16 位字符串相同:

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

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

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

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

另一种方法是使用 wchar_t wstring wcout wcin ,请注意仍然存在一些问题。

要表示字符,可以使用通用字符名称 (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

最新更新