#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
// 从窄字符串到宽字符串的转换
std::wstring narrowToWide(const std::string& narrowStr) {
try {
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
return converter.from_bytes(narrowStr);
} catch (...) { // 如果传进来的字符串不是utf8编码的,这里会抛出std::range_error异常
return {};
}
}
// 从宽字符串到窄字符串的转换
std::string wideToNarrow(const std::wstring& wideStr) {
try {
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
return converter.to_bytes(wideStr);
} catch (...) {
return {};
}
}
//utf8字符串转成string
std::string utf8ToString(const char8_t* str) {
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
std::u16string u16str = convert.from_bytes(
reinterpret_cast<const char*>(str),
reinterpret_cast<const char*>(str + std::char_traits<char8_t>::length(str)));
return std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t>{}.to_bytes(u16str);
}
int main(){
{
std::wstring wideStr = L"Hello, 你好!";
std::string narrowStr = wideToNarrow(wideStr);
std::wstring convertedWideStr = narrowToWide(narrowStr);
} {
//std::string narrowStr = "Hello, 你好!"; (1)
std::string narrowStr = utf8ToString(u8"Hello, 你好!"); //(2)
std::wstring wideStr = narrowToWide(narrowStr);
std::string convertedNarrowStr = wideToNarrow(wideStr);
}
return 0;
}
C++标准库来实现字符转换
最新推荐文章于 2026-07-31 20:53:20 发布
该博客主要展示了C++代码实现字符串转换的功能。包含从窄字符串到宽字符串、宽字符串到窄字符串的转换,以及将utf8字符串转成string的方法。代码中还给出了具体的使用示例,通过异常处理保证程序的健壮性。

102

被折叠的 条评论
为什么被折叠?



