我在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;
}