【问题标题】:How to convert from std::string to SQLWCHAR*如何从 std::string 转换为 SQLWCHAR*
【发布时间】:2014-03-12 21:55:23
【问题描述】:

我正在尝试将std::string 转换为SQLWCHAR*,但我找不到方法。

请问有什么绝妙的建议吗?

【问题讨论】:

  • 参考以下帖子:[帖子][1] [1]:stackoverflow.com/questions/11275225/…
  • @user3037661,那是std::wstring
  • 射好球,没关系
  • 您需要做的是将多字节字符串转换为宽字符字符串。这取决于您的 std::string 是如何编码的(例如 UTF8?)。 Windows 有一个名为MultiByteToWideChar 的有用函数。其他平台(或字符串库)将具有等效功能。
  • @pbergqvist,我使用的是 Unicode 字符集

标签: c++


【解决方案1】:

一种解决方案是首先简单地使用 std::wstring,而不是 std::string。使用 Unicode 字符集,您可以使用以下语法定义宽字符串文字:

std::wstring wstr = L"hello world";

但是,如果您想坚持使用 std::string,则需要将字符串转换为不同的编码。这将取决于您的 std::string 是如何编码的。 Windows 中的默认编码是 ANSI(但是从网站读取文件或下载文本时最常见的编码通常是 UTF8)。

此答案显示了在 Windows 上将 std::string 转换为 std::wstring 的函数(使用 MultiByteToWideChar 函数)。

https://stackoverflow.com/a/27296/966782

请注意,答案使用 CP_ACP 作为输入编码(即 ANSI)。如果您的输入字符串是 UTF8,那么您可以改为使用 CP_UTF8

一旦你有了一个 std::wstring,你应该能够使用以下方法轻松检索 SQLWCHAR*:

std::wstring::c_str()

【讨论】:

  • L 后面需要一个字符串,但在我的案例中,我正在尝试转换一个变量。
  • 请注意,在 Linux 上 wchar_t 不等于 SQLWCHAR。
猜你喜欢
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 2016-01-28
相关资源
最近更新 更多