cat*_*ive 5 c++ linux locale internationalization libstdc++
是否有使用 std::locale 和 C++ 流功能的 mbsrtowcs 和 wcsrtombs 类型函数的 C++ 等效项?
我试图找出使用标准库在 std::string 和 std::wstring 之间来回转换的最佳方法。似乎 std::locale 几乎可以做到这一点,但我对一些细节或它可能有哪些限制有点不确定。
一些细节:我使用的是 Linux,它使用 utf-8 作为本机编码。我想从 utf-8 std::string 到 std::wstring 并返回而不丢失信息。
我认为 Windows 上的区域设置可能存在一些限制,但我并不特别担心它们。只要答案在 Linux 上有效并且没有 libstdc++ 之外的依赖项,即没有 boost 依赖项,我就很高兴。
感谢背景信息的链接。
注意:似乎有些混乱。多个 char 可以代表 UTF-8 中的单个字符,因此在从 wchar_t 转换为 char 时不考虑这一点的函数将无法工作。
您是否尝试过创建一些简单的函数?
std::wstring StringToWString(const std::string& src)
{
std::wstring str(src.length(),L' ');
std::copy(src.begin(), src.end(), str.begin());
return str;
}
std::string WStringToString(const std::wstring& src)
{
std::string str(src.length(), ' ');
std::copy(src.begin(), src.end(), str.begin());
return str;
}
void main()
{
string s1 = "Hello World!";
wstring s2 = StringToWString(s1);
s1 = WStringToString(s2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1027 次 |
| 最近记录: |