c++ string转utf8怎么实现

   2024-09-30 2570
核心提示:在C++中,将string转换为UTF-8编码的字符串可以通过以下方法实现:使用std::wstring_convert和std::codecvt_utf8库(C++11及更高

在C++中,将string转换为UTF-8编码的字符串可以通过以下方法实现:

使用std::wstring_convert和std::codecvt_utf8库(C++11及更高版本)。
#include<iostream>#include<string>#include<locale>#include <codecvt>std::string convertToUTF8(const std::string& input) {    std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;    std::wstring wideString = converter.from_bytes(input);    return converter.to_bytes(wideString);}int main() {    std::string input = "你好,世界!";    std::string utf8String = convertToUTF8(input);    std::cout << "UTF-8 string: "<< utf8String<< std::endl;    return 0;}
使用第三方库,如iconv或Boost.Locale。

这里是一个使用iconv库的示例:

#include<iostream>#include<string>#include <iconv.h>std::string convertToUTF8(const std::string& input) {    iconv_t cd = iconv_open("UTF-8", "UTF-8"); // 根据需要更改源和目标编码    if (cd == (iconv_t)-1) {        std::cerr << "Error opening iconv"<< std::endl;        return "";    }    size_t inSize = input.size();    char* inBuf = const_cast<char*>(input.data());    size_t outSize = inSize * 4; // 预留足够的空间    char* outBuf = new char[outSize];    char* outPtr = outBuf;    while (inSize > 0) {        if (iconv(cd, &inBuf, &inSize, &outPtr, &outSize) == (size_t)-1) {            std::cerr << "Error converting string to UTF-8"<< std::endl;            break;        }    }    iconv_close(cd);    std::string result(outBuf, outPtr - outBuf);    delete[] outBuf;    return result;}int main() {    std::string input = "你好,世界!";    std::string utf8String = convertToUTF8(input);    std::cout << "UTF-8 string: "<< utf8String<< std::endl;    return 0;}

请注意,这些示例仅适用于已经是UTF-8编码的字符串。如果输入字符串使用其他编码(如GBK、GB2312等),则需要相应地调整iconv_open函数中的参数。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号