0

0

c++怎么进行UTF-8和GBK编码转换_c++ UTF-8/GBK编码转换方法

穿越時空

穿越時空

发布时间:2025-11-01 18:41:02

|

826人浏览过

|

来源于php中文网

原创

在C++中转换UTF-8与GBK编码需借助第三方库或系统API。Windows平台可使用MultiByteToWideChar和WideCharToMultiByte,先转Unicode再互转;跨平台可用iconv库,通过code_convert函数实现;推荐使用Boost.Locale,提供简洁接口并支持多后端。

c++怎么进行utf-8和gbk编码转换_c++ utf-8/gbk编码转换方法

在C++中进行UTF-8和GBK编码转换,由于标准库不直接支持这些编码格式,需要借助第三方库或调用系统API来实现。以下是几种常见且实用的方法。

使用Windows API进行转换

在Windows平台上,可以使用MultiByteToWideChar和WideCharToMultiByte函数完成UTF-8与GBK之间的转换。基本思路是:先将UTF-8转为Unicode(UTF-16),再从Unicode转为GBK,反之亦然。

UTF-8 转 GBK 示例代码:

// UTF-8 转 GBK std::string utf8_to_gbk(const std::string& utf8) { int len = MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, NULL, 0); std::wstring wstr(len, 0); MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, &wstr[0], len);
len = WideCharToMultiByte(936, 0, wstr.c_str(), -1, NULL, 0, NULL, NULL);  
std::string gbk(len - 1, 0);  
WideCharToMultiByte(936, 0, wstr.c_str(), -1, &gbk[0], len, NULL, NULL);  

return gbk;  

}

GBK 转 UTF-8 示例代码:

// GBK 转 UTF-8 std::string gbk_to_utf8(const std::string& gbk) { int len = MultiByteToWideChar(936, 0, gbk.c_str(), -1, NULL, 0); std::wstring wstr(len, 0); MultiByteToWideChar(936, 0, gbk.c_str(), -1, &wstr[0], len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, NULL, 0, NULL, NULL);  
std::string utf8(len - 1, 0);  
WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, &utf8[0], len, NULL, NULL);  

return utf8;  

}

使用iconv库(跨平台方案)

iconv是GNU提供的字符集转换库,支持多种编码,在Linux和macOS上原生支持,Windows可通过MinGW或libiconv引入。

编译时需链接libiconv:

立即学习C++免费学习笔记(深入)”;

g++ main.cpp -liconv

示例代码(UTF-8 转 GBK):

电子手机配件网站源码1.0
电子手机配件网站源码1.0

电子手机配件网站源码是一个响应式的织梦网站模板,软件兼容主流浏览器,且可以在PC端和手机端中进行浏览。模板包含安装说明,并包含测试数据。本模板基于DEDECms 5.7 UTF-8设计,需要GBK版本的请自己转换。模板安装方法:1、下载最新的织梦dedecms5.7 UTF-8版本。2、解压下载的织梦安装包,得到docs和uploads两个文件夹,请将uploads里面的所有文件和文件夹上传到你的

下载
#include

std::string code_convert(const std::string& source_str, const char from_charset, const char to_charset) {
iconv_t cd = iconv_open(to_charset, from_charset);
if (cd == (iconv_t)-1) return "";

size_t in_len = source_str.length();  
size_t out_len = in_len * 4;  
std::string result(out_len, 0);  

char* in_buf = const_castzuojiankuohaophpcnchar*youjiankuohaophpcn(source_str.c_str());  
char* out_buf = &result[0];  

size_t ret = iconv(cd, &in_buf, &in_len, &out_buf, &out_len);  
iconv_close(cd);  

if (ret == (size_t)-1) return "";  

result.resize(result.size() - out_len);  
return result;  

}

// 使用方式
std::string utf8_str = "你好";
std::string gbk_str = code_convert(utf8_str, "UTF-8", "GBK");

使用Boost.Locale(推荐用于新项目)

Boost.Locale提供了简洁的接口进行编码转换,底层可基于ICU、iconv或WinAPI,适合跨平台开发。

示例:

#include

std::string utf8_to_gbk_boost(const std::string& utf8) {
return boost::locale::conv::to_utf(utf8, "GBK");
// 或使用 conv::from_utf 转换方向
}

需要链接Boost.System和Boost.Locale库。

基本上就这些常用方法。Windows下用API最方便,跨平台建议用iconv或Boost。注意处理中文字符时确保输入合法,避免乱码。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

483

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

237

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

458

2024.03.01

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

780

2023.08.22

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

531

2023.09.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

483

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

545

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

113

2025.08.29

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.1万人学习

Git 教程
Git 教程

共21课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号