gpt4 book ai didi

c++ - wstring 字符是 Unicode 吗?转换过程中会发生什么?

转载 作者:行者123 更新时间:2023-11-30 03:58:51 24 4
gpt4 key购买 nike

最近我遇到了 UTF-8 编码到字符串的转换,反之亦然。我了解到 UTF-8 编码用于保存世界上几乎所有的字符,而使用内置于字符串数据类型的 char 时,只能存储 ASCII 值。对于 UTF-8 编码中的字符,所需的字节数在内存中从 1 个字节到 4 个字节不等,但对于“char”类型,它通常是 1 个字节。

我的问题是从 wstring 到 string 或 wchar 到 char 的转换会发生什么?需要超过一个字节的字符是否被跳过?这似乎取决于实现,但我想知道正确的做法是什么。

存储 unicode 字符也需要 wchar 吗?据我了解,UNICODE 字符也可以存储在普通字符串中。为什么要使用 wstring 或 wchar ?

最佳答案

取决于你如何转换它们。
您需要指定源编码类型和目标编码类型。
wstring 不是一种格式,它只是定义了一种数据类型。

现在通常当一个人说“Unicode”时,一个意思是 UTF16,这是 Microsoft Windows 使用的,这通常是 wstring 包含的内容.

那么,UTF8转UTF16的正确方法是:

     std::string utf8String = "blah blah";

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert;
std::wstring utf16String = convert.from_bytes( utf8String );

反之亦然:

     std::wstring utf16String = "blah blah";

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert;
std::string utf16String = convert.to_bytes( utf16String );

更让人困惑的是:
当您在 windows 平台上使用 std::string 时(例如当您使用多字节编译时),它不是 UTF8。他们使用 ANSI
更具体地说,您的 Windows 使用的默认编码语言。

在 Unicode 中编译时,windows API 命令需要这些格式:

命令A - 多字节 - ANSI
命令W - Unicode - UTF16

关于c++ - wstring 字符是 Unicode 吗?转换过程中会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27225196/

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