请指定 Windows 和 Linux 机器之间的表示是否存在差异(例如 std::wstring 在 Linux 中消耗 4 个字节,在 Windows 中消耗 2 个字节)。
如有必要,还请指定字节顺序。
3 回答
不,我不能。但是这个网站可以。
utf-16BE 是 MS office 系列产品中使用的代码页,它将所有字符存储为 2 个字节,并且与 Unicode 字符集的“标准”部分几乎相同。
Linux 可能正在使用 utf-8,它将标准 ASCII 字符存储在单个字节中,但可能将其他 unicode 字符存储在两个、三个或四个字节中,具体取决于 unicode 代码点。因为最左边的位被标志占用,以表明它不是 ascii 以及你在多字节字符中的距离。(想法是您可以以随机字节跳转到 utf-8 字符串,并能够找到您所在字符的开头。)
对于大多数在 unicode 中具有高代码点的远东字符集(如 Java 使用的那样),通常在空间和处理时间上比 UTF-8 更有效。
这是你想要的吗:
int main()
{
std::wstring data1 = L"U+9FA5 (\0x9FA5)";
std::wstring data2 = L“U+0041 (A)";
}
wstring 只是 wchar_t 对象的容器。
没有隐含的字符编码(它只存储您输入的内容)。
Windows wchar_t 当前为 2 个字节,因此它可能只能存储 UTF-16 字符。Linus wchar_t 通常是 4 个字节。因此它可以使用 UTF-16 或 UTF-32 的编码。尽管在大多数正常情况下,这些重叠和上半部分都为零(当然例外是不在 BMP 或代理对上的代码点)。
注意:UTF-8 字符通常不会在应用程序内部使用(尽管它们可以使用),因为它们不是固定宽度。但它对传输和存储非常有用,因为它具有可压缩性(并且与 ASCII 的向后兼容性不会受到影响)。
注意:C/C++ 不排除对其字符串使用其他编码格式。