gpt4 book ai didi

android - 如何在不使用 mbstowcs 的情况下在 C++ 中将 ASCII char* 转换为 wchar_t*?

转载 作者:行者123 更新时间:2023-11-27 23:13:44 25 4
gpt4 key购买 nike

我想在 Linux 上用 C++ 将 ASCII char* 转换为 wchar_t*,而不使用 mbstowcs()。在 iOS 和 Windows 上,这非常有效。然而,在 Android 上,mbstowcs 似乎完全按字面意思一对一地转换事物。即使使用 setlocale() 的不同变体,我也无法成功转换。

我最终可能会在 Android 上通过复制 1 个字节并用零填充其余部分来手动转换它。但这适合 ASCII 吗? UTF-32/Unicode 的前 255 个字符是否与 ASCII(ISO 8859-1/ISO Latin-1)字符集相同?

最佳答案

让思路更清晰:

  • ASCII 是一种字符编码,使用 0..127 之间的值对单个字符进行编码。
  • Latin-1 是另一种字符集,它通过使用 128..255 中的值来编码自己的字符来扩展 ASCII。

确实大多数架构字节都是8位的,所以用字节存储ASCII字符时还有128个值可用。因此设计了几个不同的字符集来扩展 ASCII 的值从 128..255。快乐的意外,那个被称为Latin-1的用于 Unicode 中的前 256 个代码点(如 BoBTFish 所指出的)。因此,如果您一方面知道使用 Latin-1 编码的字符字符串,则只需将每个值分配给一个 wchar_t(这将确保在您的体系结构上的字节顺序方面正确“零填充”),并且它将是与相同字符对应的有效 unicode 代码点 的 wstring。然后,您的 wstring 的使用者必须将其内容解释为 unicode 代码点。

另外,一旦你不能保证原始字符串的编码是 Latin-1,你就会遇到问题。 (例如,UTF-8 编码不是逐字节映射到 Latin-1)。

关于android - 如何在不使用 mbstowcs 的情况下在 C++ 中将 ASCII char* 转换为 wchar_t*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18107774/

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