UTF-32字符串编码是否有32位宽字符?我想通过std::wstring来实现,它显然显示Windows平台上宽字符的大小为16位。
std::wstring
uemypmqf1#
在许多平台上,您将无法使用std::wstring执行此操作,因为它将包含16位元素。相反,您应该使用std::basic_string<char32_t>,但这需要具有一些C++0x支持的编译器。
std::basic_string<char32_t>
6pp0gazn2#
wchar_t的大小取决于平台,它独立于UTF-8、UTF-16和UTF-32(它可以用于表示unicode数据,但没有说明它表示unicode数据)。我强烈建议使用UTF-8和std::string来表示内部字符串,并使用ICU等已建立的库来处理涉及unicode的复杂操作和转换任务。
wchar_t
std::string
vxqlmq5t3#
使用typedef即可!它看起来像这样:
typedef
typedef int char_32;
并像这样使用它:
char_32 myChar;
或者作为C-串:
char_32* string_of_32_bit_char = "Hello World";
h9vpoimq4#
现代的解决方法是使用char32_t(c++11),它可以和std::u32string一起使用。然而,实际上,你应该只使用std::string和类似UTF-8的编码。注意,char32_t的旧方法是使用模板或宏来确定哪个无符号整型的大小为4字节,然后使用它。
char32_t
std::u32string
4
4条答案
按热度按时间uemypmqf1#
在许多平台上,您将无法使用
std::wstring
执行此操作,因为它将包含16位元素。相反,您应该使用
std::basic_string<char32_t>
,但这需要具有一些C++0x支持的编译器。6pp0gazn2#
wchar_t
的大小取决于平台,它独立于UTF-8、UTF-16和UTF-32(它可以用于表示unicode数据,但没有说明它表示unicode数据)。我强烈建议使用UTF-8和
std::string
来表示内部字符串,并使用ICU等已建立的库来处理涉及unicode的复杂操作和转换任务。vxqlmq5t3#
使用
typedef
即可!它看起来像这样:
并像这样使用它:
或者作为C-串:
h9vpoimq4#
现代的解决方法是使用
char32_t
(c++11),它可以和std::u32string
一起使用。然而,实际上,你应该只使用std::string
和类似UTF-8的编码。注意,char32_t
的旧方法是使用模板或宏来确定哪个无符号整型的大小为4
字节,然后使用它。