2021年5月

可以使用 /utf-8 选项指定使用编码的源和执行字符集 UTF-8 。 它相当于 /source-charset:utf-8 /execution-charset:utf-8 在命令行上指定。 默认情况下,这些选项中的任何一个都启用了 /validate-charset 选项。 有关支持的代码页标识符和字符集名称的列表,请参阅 代码页标识符。
默认情况下,Visual Studio 会检测字节顺序标记,以确定源文件是否为编码的 Unicode 格式,例如 UTF-16 或 UTF-8 。 如果未找到字节顺序标记,则假定使用当前用户代码页对源文件进行编码,除非已使用或选项指定了代码页 /utf-8 /source-charset 。 Visual Studio 允许使用多个字符编码中的任意一种来保存 c + + 源代码。 有关源和执行字符集的信息,请参阅语言文档中的 字符集 。

参考连接:https://docs.microsoft.com/zh-cn/cpp/build/reference/utf-8-set-source-and-executable-character-sets-to-utf-8?redirectedfrom=MSDN&view=msvc-160

#include <string>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <vector>
bool ReplaceWhiteSpace(std::string& source, const std::string& delimiters)
{
    if (source.empty())
    {
        return false;
    }

    for (std::size_t pos = source.find(delimiters); pos != std::string::npos; pos = source.find(delimiters))
    {
        if (source.replace(pos, 1, " ").size())
        {
            continue;
        }
        return false;
    }

    return true;
}

bool StringSplit(std::string& source, std::vector<std::string>& array, const std::string& delimiters)
{
    if (ReplaceWhiteSpace(source, delimiters))
    {
        if (array.empty())
        {
            array.swap(*const_cast<std::vector<std::string>*>(std::addressof(static_cast<const std::vector<std::string>&>(std::move(std::vector<std::string>
            {
                std::istream_iterator<std::string>(*const_cast<std::istringstream*>(std::addressof(static_cast<const std::istringstream&>(std::move(std::istringstream(source)))))),
                std::istream_iterator<std::string>()
            })))));
            return true;
        }
    }

    return false;
}