c++ - 具有不同语言环境的 std::wstring 中 ASCII 符号的字节表示

标签 c++ windows locale wstring

Windows C++ 应用程序。我们有一个仅包含 ASCII 符号的字符串:std::wstring(L"abcdeABCDE ... any other ASCII symbol")。请注意,这是使用 wchar_tstd::wstring

问题 - 这个字符串的字节表示取决于本地化设置,还是其他什么?我可以假设如果我在应用程序运行时收到这样的字符串(例如,来自 WindowsAPI),它的字节将与我的 PC 上的字节相同吗?

最佳答案

一般来说,对于字符(不是转义序列),wchar_twstring 必须使用与 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/

相关文章:

Windows + wmic + 内存

java - Eclipse 返回错误信息 “Java was started but returned exit code= 1”

java - Linux 服务器不支持西类牙字符

C++ 将光标设置在文件中的确切行

c++ - 如何让 GCC/Clang 在保留标识符上出错

C++ 使用 C++11 (std::shared_ptr) 分配 shared_ptr:将 shared_ptr 初始化为临时变量是否仍然不好?

windows - 系统关机时如何运行bat文件

python - 具有浮点值的 Tkinter 缩放 slider 不适用于使用逗号表示 float 的语言区域

android - 获取简体中文的语言环境变体

c++ - 检查子类型时特化方法模板