本例来源于CSDN的另一篇博客,但并非是复读机。原博客使用char类型作为输入,需要传递src_len和dst_len,用起来比较难受。本文使用std::string做了封装,不需要传递src_len和dst_len,代价就是在函数中动态分配了2src_len的空间。

#include <iostream>
#include <string>
#include <string.h>
#include <stdlib.h>
#include <iconv.h>
#include <fstream>using namespace std;bool encoding_convert(std::string const& src_str, std::string& dst_str, std::string const& src_encoding, std::string const& dst_encoding)
{iconv_t cd;std::size_t src_len = src_str.size();std::size_t dst_len = src_len * 2;dst_str.resize(dst_len);cd = iconv_open(dst_encoding.c_str(), src_encoding.c_str());if (cd == 0)return false;char* src_data = (char*)(src_str.data());char* dst_data = (char*)(dst_str.data());std::size_t left_len {dst_len};if (iconv(cd, &src_data, &src_len, &dst_data, &left_len) == -1)return false;iconv_close(cd);dst_str.resize(dst_len-left_len);return true;
}char const* GBK = "gbk";
char const* UTF8 = "utf8";#define GBK_2_UTF8(src_str, dst_str) encoding_convert(src_str, dst_str, GBK, UTF8)
#define UTF8_2_GBK(src_str, dst_str) encoding_convert(src_str, dst_str, UTF8, GBK)int main(int argc, char* argv[]) {std::string src = "\xc4\xe3\xba\xc3";std::string dst;std::fstream ofs("./result.txt", std::ios::out);GBK_2_UTF8(src, dst);std::cout << "Source GBK string:" << src << std::endl;std::cout << "Result UTF8 String: " << dst << std::endl;ofs << dst << std::endl;std::cout << "========================================" << std::endl;std::cout << std::endl;std::cout << std::endl;std::string src1 = "你好,小黄鸡,小黄鸭,小黄狗";std::string dst1;UTF8_2_GBK(src1, dst1);std::string res;GBK_2_UTF8(dst1, res);ofs << res << std::endl;ofs.close();std::cout << "Source UTF-8 string:" << src1 << std::endl;std::cout << "Result GBK string:" << dst1 << std::endl;std::cout << "Result UTF-8 string:" << res << std::endl;return EXIT_SUCCESS;
}

CMakeLists.txt


cmake_minimum_required(VERSION 2.6)
project(chat_room)add_definitions(-std=c++14)find_package(Boost REQUIRED COMPONENTSsystemfilesystemserializationprogram_optionsthread)include_directories(${Boost_INCLUDE_DIRS})file( GLOB APP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
foreach( sourcefile ${APP_SOURCES} )file(RELATIVE_PATH filename ${CMAKE_CURRENT_SOURCE_DIR} ${sourcefile})if( "${filename}" STREQUAL "main.cpp")string(REPLACE ".cpp" "" file ${filename})add_executable(${file}  ${APP_SOURCES})target_link_libraries(${file} ${Boost_LIBRARIES})target_link_libraries(${file} pthread)endif()
endforeach( sourcefile ${APP_SOURCES})

程序输出如下,

result.txt文件内容如下,

Linux C++ 乱码字符转换问题 GBK转UTF8相关推荐

  1. Android字符编码转换,GBK转UTF-8

    Android字符编码转换,GBK转UTF-8 网上看了很多都不能用,最后看到这个方法,很靠谱,分享给大家! String str; str = new String(str.getBytes(&qu ...

  2. 将文字或txt转换成GBK或者UTF8编码

    将文字或txt转换成GBK或者UTF8编码 用到的工具 Sublime Text 3 点击下载 安装好后 打开界面输入ctrl+shift+p键 界面弹出输入框 输入install package 回 ...

  3. Qt4工作笔记-Linux中Qt4.8.6在GBK和UTF-8编码转换

    目录 基本概念 代码与实例 基本概念 背景是这样的.目前在本人开发的系统里面,有几个程序. 使用Qt管理(通过pro文件,生成Makefile,姑且称为Qt管理把)的后台进程,读取关系型数据库的数据后 ...

  4. python语言\xe6\x97\xa0\xe6\xb3\x95\xe5\x8a\xa0\xe8乱码字符转换

    centos7上安装hhvm(php解释器),运行之后 在hhvm错误日志中发现一段乱码,想要知道内容,用python实现了乱码的转换. 乱码如下 '\xe6\x97\xa0\xe6\xb3\x95\ ...

  5. JAVA文件编码转换:gbk转utf-8

    JAVA文件编码转换 Android项目从eclipse迁移至Android Studio,遇到了编码问题,本来想偷懒找个工具,奈何百度大法没练好,索性就自己写了2333 说明:将gbk编码的.jav ...

  6. linux shell ascii 字符 转换

    1.ASCII值转换为字符 方法一: i=97 echo $i | awk '{printf("%c", $1)}' 方法二: t=`printf "%x" 9 ...

  7. CLion 输出遇到乱码解决办法,GBK和utf-8的转换

    具体操作 File -> Settings -> Default Settings -> Editor -> File Encodings: Global Encoding: ...

  8. [html] 解释下你对GBK和UTF-8的理解?并说说页面上产生乱码的可能原因

    [html] 解释下你对GBK和UTF-8的理解?并说说页面上产生乱码的可能原因 gbk和utf8的理解我们这里将以最简单最容易理解的方式来描述GBK和UTF8的区别,以及它们分别是什么.GBK编码: ...

  9. c语言字符串如何转换成gbk,C语言实现GBK/GB2312/五大码之间的转换(转)

    //--------------------------------------------------------------------------- // 大五码Big5转GBK码: void ...

最新文章

  1. 7 大主题!梳理神经网络中 Normalization 的发展历程
  2. window下使用虚拟机安装Linux操作系统CentOS
  3. java观察者模式类图_设计模式(十八)——观察者模式(JDK Observable源码分析)...
  4. Makefile与Shell的问题
  5. 发送IP和MAC地址的方法
  6. Spring8:一些常用的Spring Bean扩展接口
  7. 005 form组件---基本使用.
  8. 打表巧解蛇形方阵(洛谷P5731题题解,Java语言描述)
  9. 深入理解Golang之context
  10. 事务没提交的数据查的出来吗?_品牛栏山,论分布式事务
  11. PowerVR 6XT/6XE系列移动GPU
  12. 一寸照纯红色底图片_高大上的图片精修,其实只需要学会这7个方面!
  13. php+mysql+like+通配符+变量
  14. div模拟textarea在ios下不兼容的问题解决
  15. python获取二维矩阵的每一行的第一个非零元素
  16. PTA甲级15进制转换
  17. 70部MAYA灯光材质渲染教程合集
  18. wine装通达信_通过wine使用通达信、钱龙、同花顺、大智慧软件 | 学步园
  19. android与单片机wifi通信原理图,基于单片机的wifi模块原理图分析
  20. 消息中间件RabbitMQ(五)——实现RPC调用

热门文章

  1. Windows的NSIS ERROR
  2. Android 多语言支持
  3. 2022.3.12 绍兴文理学院元培学院第十五届大学生程序设计竞赛
  4. 没有了剪辑和台本,papi酱为何要“强行”直播
  5. mysql counta_MySQL的COUNT函数
  6. 亲完如何进行下一步_吻过女孩后,下一步怎么办?
  7. 杰理之蓝牙认证【篇】
  8. CF Gym 100685A Ariel
  9. Chapter 20 Treatment-Confounder Feedback
  10. oogle advertiser api开发概述——速率限制