c++
中的 1 byte
内容为unicode
,但大多数2 bytes
个字符需要unicode
。
这是否意味着characters
无法存储在c++
的{{1}}中?
答案 0 :(得分:1)
没有char
不是唯一的。如果你在Windows上有wchar_t
(WCHAR
)或者通常认为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
。
通常通过宏定义WCHAR
或TCHAR
。
您可以强制使用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