我在std::wstring中有一个简单的字符串

std::wstring tempStr = _T("F:\\Projects\\Current_자동_\\Cam.xml");

我想将此字符串存储在std::string中。

我尝试了以下代码,但结果与输入字符串不同
std::wstring tempStr = _T("F:\\Projects\\Current_자동_\\Cam.xml");
//setup converter
typedef  std::codecvt_utf8_utf16 <wchar_t> convert_type;
std::wstring_convert<convert_type, wchar_t> converter;

//use converter (.to_bytes: wstr->str, .from_bytes: str->wstr)
std::string converted_str = converter.to_bytes( tempStr );

输入字符串中存在的韩文字符串将转换为"ìžë™"

有什么办法可以在std::string中获得相同的字符串?

预期结果:
converted_str应包含 F:\Projects\Current_자동_\Cam.xml

以下是调试的屏幕截图,显示了3种情况下的3个值(以3种方式转换)。但是它们都不给人期望的值(value)。

最佳答案

您的转换代码很好。

实际上,在UTF-8(存储在std::string中的字符串)中,字符자동对应于:



如果运行以下程序,该程序仅打印转换后的UTF-8字节,则会得到以下输出:


#include <iomanip>      // For std::hex
#include <iostream>     // For console output
#include <string>       // For STL strings
#include <codecvt>      // For Unicode conversions

void print_char_hex(const char ch)
{
    auto * p = reinterpret_cast<const unsigned char*>(&ch);
    int i = *p;
    std::cout << std::hex << i << ' ';
}

int main()
{
    std::wstring utf16_str = L"\xC790\xB3D9";

    // setup converter
    typedef  std::codecvt_utf8_utf16<wchar_t> convert_type;
    std::wstring_convert<convert_type, wchar_t> converter;

    // use converter (.to_bytes: wstr->str, .from_bytes: str->wstr)
    std::string converted_str = converter.to_bytes( utf16_str );

    // Output the converted bytes (UTF-8)
    for (size_t i = 0; i < converted_str.length(); ++i)
    {
        print_char_hex(converted_str[i]);
    }
    std::cout << std::endl;
}

10-06 12:56