gpt4 book ai didi

c++ - std::wstring 在 Windows 上是否支持 UTF-16 和 UTF-32?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:40 25 4
gpt4 key购买 nike

我正在学习 Unicode,有几个问题希望得到解答。

1) 我读过,在 Linux 上,std::wstring 是 4 个字节,而在 Windows 上,它是 2 个字节。这是否意味着 Linux 内部支持是 UTF-32 而 Windows 是 UTF-16

2) std::wstring 的使用是否与 std::string 接口(interface)非常相似?

3) VC++ 是否支持使用 4 字节的 std::wstring?

4) 如果使用 std::wstring,是否必须更改编译器选项?

作为旁注,我遇到了一个用于使用 UTF-8 的字符串库,它具有与 std::string 非常相似的接口(interface),它提供了熟悉的功能,例如长度、substr、查找、大写/小写转换等。库是 Glib::ustring

请随时添加任何评论或其他建议,因为我真的需要它。

谢谢!

最佳答案

1) I've read that on Linux, a std::wstring is 4-bytes, while on Windows, it's 2-bytes. Does this mean that Linux internal support is UTF-32 while Windows it is UTF-16?

实际上是wchar_t , 不是 std::wstring ,在 Linux 上是 4 个字节,在 Windows 上是 2 个字节。 std::wstringstd::basic_string<wchar_t> 的类型定义, 所以 std::wstring在 Linux 上支持 UTF-32,在 Windows 上支持 UTF-16,是的。

2) Is the use of std::wstring very similar to the std::string interface?

两者都是 std::wstringstd::stringstd:basic_string 的类型定义, 所以他们有相同的接口(interface),只是不同 value_type类型(分别为 wchar_tchar)。

3) Does VC++ offer support for using a 4-byte std::wstring?

不适用于 std::wstring本身,不。但您可以创建自己的 std::basic_string类型定义,例如:

typedef std::basic_string<int32_t> u32string;

事实上,这正是新的 C++11 std::u16string 的方式和 std::u32string定义类型:

typedef std::basic_string<char16_t> u16string;
typedef std::basic_string<char32_t> u32string;

制作 std::basic_string 的类型定义也并非闻所未闻。对于 TCHAR :

typedef std::basic_string<TCHAR> tstring;

As a sidenote, I came across a string library for working with UTF-8 which has a very similar interface to std::string which provides familiar functionality such as length, substr, find, upper/lower case conversion etc. The library is Glib::ustring.

从技术上讲,您可以(很多人都这样做)使用标准 std::string对于 UTF-8。 Glib::ustring只需使用 gunichar 更进一步(guint32 的类型定义)而不是 char ,并公开其接口(interface)以根据原始 Unicode 代码点而不是编码代码单元进行操作。

关于c++ - std::wstring 在 Windows 上是否支持 UTF-16 和 UTF-32?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25938373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com