Windows C++ 应用程序。我们有一个仅包含 ASCII 符号的字符串:std::wstring(L"abcdeABCDE ... any other ASCII symbol")
。请注意,这是使用 wchar_t
的 std::wstring
。
问题 - 这个字符串的字节表示取决于本地化设置,还是其他什么?我可以假设如果我在应用程序运行时收到这样的字符串(例如,来自 WindowsAPI),它的字节将与我的 PC 上的字节相同吗?
最佳答案
一般来说,对于字符(不是转义序列),wchar_t
和wstring
必须使用与 ASCII 相同的代码(只是扩展到 2 个字节)。
但是我不确定小于 32 的代码,当然大于 128 的代码在输出时可能具有不同的含义(如在 ASCII 中),因此为了避免输出问题,请明确设置特定的语言环境,例如:
locale("en_US.UTF-8")
标准输出
wcout.imbue(locale("en_US.UTF-8"));
更新:
我发现了一个关于添加的建议
std::ios_base::sync_with_stdio(false);
在使用 imbue
设置本地化之前
详见How can I use std::imbue to set the locale for std::wcout?
关于c++ - 具有不同语言环境的 std::wstring 中 ASCII 符号的字节表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37579201/