【问题标题】:C++. Convert char* with unicode (UTF-8) symbols to std::wstring [duplicate]C++。将带有 unicode (UTF-8) 符号的 char* 转换为 std::wstring [重复]
【发布时间】:2015-10-19 12:11:39
【问题描述】:

我遇到了很常见的问题,但我找不到解决方案。 tinyxml2 库返回 const char*Attribute(const char*) 方法。在使用该库打开的 xml 文件中,我有带 unicode 和不带 unicode 的属性。文件转换为 UTF-8。使用 Linux,但也很高兴看到 Windows 的解决方案。有什么建议吗?

【问题讨论】:

  • 我不确定您在问什么...您是在问如何将库返回的const char * 转换为std::wstring
  • 你用过swprintf()函数吗?看看这里link
  • @BrianGradin Ye 我问你到底写了什么。但是您的链接仅适用于 Windows,我已经找到了。 (但无论如何感谢它,因为它有点像 Windows 解决方案)。但是现在我需要linux解决方案。
  • @QuestionAndAnswer Ye,我看到了那个链接,但它是 Windows 解决方案。我看到另一个使用 utf8 库的解决方案较低,但我会在没有库的情况下解决这个问题。 (如果不可能,我会使用 lib)

标签: c++ unicode utf-8 tinyxml2


【解决方案1】:

像这样:

std::wstring utf8_decode(const std::string &str) 
{
    int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
    std::wstring wstrTo( size_needed, 0 );
    MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
    return wstrTo;
}

【讨论】:

  • 什么,我的代码有问题吗?
  • 我不是投反对票的人,但这真的是your code吗?
  • @Siguza 几乎是的,我把它放在谷歌搜索中(正常)。我在弄乱 GDI+ 时创建了它,因为它需要 unicode。
  • 代码与this answer 一样相同,包括格式、变量命名和强制转换选择。
  • @IInspectable 你是对的,我想我只是不记得了。我只记得在谷歌搜索和 MSDN 中查看了 MultiByteToWideChar 函数。
猜你喜欢
  • 2011-11-01
  • 2011-04-06
  • 2019-02-19
  • 1970-01-01
  • 2014-08-01
  • 2014-08-15
  • 2011-05-20
  • 2018-04-01
相关资源
最近更新 更多