【发布时间】:2013-02-04 18:24:29
【问题描述】:
我知道 UTF-16 有两种字节序:大字节序和小字节序。
C++ 标准是否定义了 std::wstring 的字节顺序?还是实现定义的?
如果是标准定义的,C++标准的哪个页面提供了关于这个问题的规则?
如果是实现定义的,如何确定?例如在 VC++ 下。编译器是否保证 std::wstring 的字节序严格依赖于处理器?
我必须知道这一点;因为我想将 UTF-16 字符串发送给其他人。我必须在 UTF-16 字符串的开头添加正确的 BOM 以指示其字节顺序。
简而言之:给定一个 std::wstring,我应该如何可靠地确定它的字节序?
【问题讨论】:
-
该标准甚至没有指定
wchar_t的大小,它不会给出字节顺序。 -
为什么你需要知道这个?字节序主要取决于架构。
-
@EalGray,我必须知道这一点,因为我想将 UTF-16 字符串发送给其他人。我必须在开头添加正确的 BOM。
-
wstring完全是实现定义的...如果您要与他人交流,would be kind of you to use UTF-8 instead 不会遇到所有这些问题。 -
@xmllmx: 1) 如果它已经在内存中,你不需要知道字节序。就像您对整数求和时不关心整数的字节序一样。等于 0x0123 的 wchar_t 表示任何使用 UTF-16 处理 wchar_t 字符串的平台上的代码点 U+0123。 2)“编译器填充字符”?你的意思是“字符串文字”吗?那么如何使用 UTF-8 字符串文字,在 C++11 中以
u8"????"的形式提供,或者在其他编译器上以"????"的形式提供(在链接中描述)?
标签: c++ string unicode standards endianness