C++字符编码 cppp-reiconv库使用详解
经常写一些控制台小程序,常常会遇到输出中文乱码的问题,在windwos下可以使用MultiByteToWideChar转换字符编码,但跨平台就需要cppp-reiconv这样的第三方字符编码处理库,且开源。
一、下载cppp-reiconv库的源码和静/动态库
GitHub 地址: https://github.com/cppp-project/cppp-reiconv
二、自行编译cppp-reiconv库
虽然cppp-reiconv提供静/动态库,但它注明了“Environment”是“MSVC”,我在windows下使用的GCC编译器,所以还是自己编译一下,以保证兼容性。这里使用CMAKE(GUI)。

设置好源码目录和Build目录后,分别点Configure和Generate生成CMAKE配置文件。
在控制台使用mingw32-make进行make。

会在Build目录生成bin和lib目录,里面就是动态库和静态库(win下也可以链接.a文件)。include是头文件目录。
三、cppp-reiconv库使用实例
main.cpp:(文件编码是UTF8)
#include <iostream>#include "reiconv.hpp"using namespace std;
using namespace cppp::base::reiconv;/*** 将UTF-8编码的字符串转换为GBK编码的字符串* @param str 输入的UTF-8编码的字符串* @return 转换后的GBK编码的字符串*/
std::string UTF8_GBK(const std::string& str)
{// 将输入字符串复制到vector中,以便于接下来的编码转换std::vector<char> vec(str.begin(), str.end());// 执行编码转换,将UTF-8编码转换为GBK编码auto res=encode("UTF-8","GBK",vec);std::string str_c; // 从转换结果中构造GBK编码的字符串str_c = std::string(res.data(), res.size()); return str_c;
}
int main()
{//system("chcp 936"); cout <<UTF8_GBK("Hi中文\nабвгдеёжзийкхфутс\n替朗讯一顺要工要在一一人有的和主产不为这" )<< endl;
}
vscode的task.json文件:
{"tasks": [{"type": "cppbuild","label": "cppp-reiconv-v2.1.0-test Debug","command": "G:\\GCC64\\TDM-GCC-64\\bin\\g++.exe","args": ["-static","-I","${fileDirname}\\include","-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe","-L","${fileDirname}","-lcppp-reiconv.static"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}],"version": "2.0.0"
}
运行效果:


可见,在65001编码的控制台下,输出中文是乱码,在936编码的控制台下,输出中文正常。
四、其他
经测试“MSVC“的库无法用GCC链接。
相关文章:
C++字符编码 cppp-reiconv库使用详解
经常写一些控制台小程序,常常会遇到输出中文乱码的问题,在windwos下可以使用MultiByteToWideChar转换字符编码,但跨平台就需要cppp-reiconv这样的第三方字符编码处理库,且开源。 一、下载cppp-reiconv库的源码和静/动态库 GitHu…...
通过继承React.Component创建React组件-5
在React中,V16版本之前有三种方式创建组件(createClass() 被删除了),之后只有两种方式创建组件。这两种方式的组件创建方式效果基本相同,但还是有一些区别,这两种方法在体如下: 本节先了解下用extnds Reac…...
PgSQL内核机制 - 算子执行统计元组个数
PgSQL内核机制 - 算子执行统计元组个数 我们在执行explain analyze观察执行计划执行情况时,时常通过每个算子实际执行结果来分析SQL的执行,其中有一项“rows XXX”表示执行的行数(这里姑且先认为是执行的真实行数)。但有些场景下…...
Ubuntu/Linux 安装Paraview
文章目录 0. 卸载已有ParaView1. 安装ParaView1.1 下载后安装 2.进入opt文件夹改名3. 更改启动项4. 创建硬链接5. 添加桌面启动方式6. 即可使用 0. 卸载已有ParaView YUT 1. 安装ParaView https://www.paraview.org/ 1.1 下载后安装 找到下载的文件夹,文件夹内…...
内存泄漏及其解决方法
1. 系统崩溃前的现象 垃圾回收时间延长:从原本的约10ms增长至50ms,Full GC时间也由0.5s增加至4-5s。Full GC频率增加:最短间隔可缩短至1分钟内发生一次。年老代内存持续增长:即使经过Full GC,年老代内存未见明显释放。…...
Java进阶学习笔记13——抽象类
认识抽象类: 当我们在做子类共性功能抽取的时候,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了。在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类就定义为抽象类…...
【Docker学习】深入研究命令docker exec
使用docker的过程中,我们会有多重情况需要访问容器。比如希望直接进入MySql容器执行命令,或是希望查看容器环境,进行某些操作或访问。这时就会用到这个命令:docker exec。 命令: docker container exec 描述&#x…...
C语言中的文件操作
前言 嗨,我是firdawn,在本章中我们将介绍,文件的概念,文件的打开和关闭,在篇末我们将介绍文件缓冲区的作用,下面是本章的思维导图,接下来,让我们开始今天的学习吧! 一…...
python使用xlrd读取excel的时候把字符串读成了数字
xlrd 是一个 Python 库,用于读取 Excel 文件(.xls 和 .xlsx,但 .xlsx 需要 openpyxl 或 xlrd 的较新版本)。然而,xlrd 在读取 Excel 文件时通常会将单元格的内容按其原始数据类型(如字符串、数字、日期等&a…...
【C语言】走进指针世界(下卷)
前言 在“走进指针世界(上卷)”中,我们已经说过:什么是指针、内存和地址,指针的使用、声明、初始化,取地址运算符、解引用运算符以及这两者关系,还有指针赋值。 在正式使用指针进行各种代码的…...
【Spring】SSM整合_入门代码实现
1. Maven依赖 在pom.xml中添加SSM框架的依赖 <!-- Spring Core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.x</version> </dependency>…...
C++代码错误解决1(函数模板)
1、代码如下 //示例函数模板的使用 #include <iostream> #include <string> using namespace std; template <typename T>//函数模板 T max(T a,T b) {return a>b?a:b; } int main() {int a,b;cout<<"input two integers to a&b:"…...
idea configuration 配置 方便本地启动环境切换
idea 再项目启动的时候避免切换环境导致上线的时候出现环境配置问题 可以再idea 的 configuration 中配置项目的 vm options 虚拟机的内容占用 -Xmx256m -Xms256m -Xmn100m -Xss256k program arguments properties 文件中需要修改的配置参数 active profiles 指定启动的本…...
win10配置wsl的深度学习环境
# 1、一步完成wsl:开启虚拟机、linux子系统、并下载ubuntu # 官方文档: https://learn.microsoft.com/zh-cn/windows/wsl/install wsl --install# 2、打开windows terminal,选ubuntu交互环境 # 第一次需要配置用户名和密码 # 接下来正常使用即可# 3、cud…...
如何处理时间序列的缺失数据
您是否应该删除、插入或估算? 世界上没有完美的数据集。每个数据科学家在数据探索过程中都会有这样的感觉: df.info()看到类似这样的内容: 大多数 ML 模型无法处理 NaN 或空值,因此如果您的特征或目标包含这些值,则在…...
fastapi中实现多个路由请求
大家伙,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 前言 最近在写机器人相关的接口,顺手学了学python,发现这是个好东西,写代码效率比java要高很多,比如写个词云呀,写个回调呀&am…...
前端框架选择指南:React vs Vue vs Angular
选择前端框架时,React、Vue 和 Angular 都是流行的选择,各有优缺点。我们可以从各个维度进行比较和选择: React 核心理念: 组件化开发,专注于视图层。学习曲线: 相对平缓,因为重点在于JSX和组…...
猫头虎 解析:为什么AIGC在国内适合做TOB,在国外适合做TOC?
猫头虎 解析:为什么AIGC在国内适合做TOB,在国外适合做TOC? 博主 猫头虎 的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面…...
并发编程笔记8--ThreadLocal结构详解
ThreadLocal,即线程变量,是一个以ThreadLocal对象为键,任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的值。可以通过set(T)方法来设置一个值,在…...
强烈推荐 20.7k Star!企业级商城开源项目强烈推荐!基于DDD领域驱动设计模型,助您快速掌握技术奥秘,实现业务快速增长
更多资源请关注纽扣编程微信公众号 1 项目简介 商城是个从零到一的C端商城项目,包含商城核心业务和基础架构两大模块,推出用户、消息、商品、订单、优惠券、支付、网关、购物车等业务模块,通过商城系统中复杂场景,给出对应解决方案。使用 …...
ComfyUI-VideoHelperSuite:3种视频处理难题的节点式解决方案
ComfyUI-VideoHelperSuite:3种视频处理难题的节点式解决方案 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 你是否曾为视频处理中的重复性任务感到头…...
Python类型提示Type Hints完整教程
Python类型提示Type Hints完整教程 Python作为一门动态类型语言,其灵活性广受开发者喜爱,但也常因缺乏明确的类型声明而导致代码可读性和维护性下降。Type Hints(类型提示)的引入,为Python代码注入了静态类型检查的能…...
告别臃肿!Dell G15开源散热控制神器tcc-g15完全指南
告别臃肿!Dell G15开源散热控制神器tcc-g15完全指南 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否正在为Dell G15笔记本的散热问题烦恼&am…...
Steam成就管理器终极指南:3分钟解锁所有游戏成就的免费神器
Steam成就管理器终极指南:3分钟解锁所有游戏成就的免费神器 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager 还在为那些看似不可能完成的游戏成…...
别再混用了!PyTorch实战:CrossEntropyLoss和BCEWithLogitsLoss到底怎么选?(附MNIST与多标签分类代码)
PyTorch损失函数实战指南:CrossEntropyLoss与BCEWithLogitsLoss的精准选择 当你面对一个分类问题时,选择正确的损失函数往往决定了模型的成败。PyTorch提供了多种损失函数,但CrossEntropyLoss和BCEWithLogitsLoss是最容易混淆的两个。本文将带…...
深入解析LOAM_Velodyne:从特征提取到实时3D激光SLAM的实现
1. LOAM_Velodyne算法概述 第一次接触LOAM_Velodyne时,我被它处理3D激光点云的独特方式惊艳到了。这个算法不像传统SLAM那样直接匹配整个点云,而是通过提取特征点来降低计算量,同时保证了实时性。简单来说,它就像是一个聪明的建筑…...
Kandinsky-5.0-I2V-Lite-5s部署案例:高校AI课程实验平台——学生自助生成动态作业
Kandinsky-5.0-I2V-Lite-5s部署案例:高校AI课程实验平台——学生自助生成动态作业 1. 项目背景与需求 在高校AI课程教学中,如何让学生直观理解图生视频技术一直是个挑战。传统实验往往局限于理论讲解和简单演示,学生缺乏动手实践机会。Kand…...
数据库扩展方案设计
数据库扩展方案设计:应对海量数据挑战 随着数据量的爆炸式增长,传统单机数据库已无法满足高并发、高可用的业务需求。数据库扩展方案设计成为企业技术架构中的核心课题,它直接关系到系统的稳定性、性能和成本效益。本文将探讨几种关键的扩展…...
Rust 宏系统的构建方式
Rust宏系统的构建方式:解锁元编程的魔法钥匙 Rust的宏系统是其元编程能力的核心,它允许开发者在编译时生成和操作代码,从而提升代码的复用性和表达力。与C/C的文本替换宏不同,Rust的宏系统基于语法树操作,兼具安全性与…...
【deepin】通过x11vnc与xrdp实现Windows无缝远程控制deepin桌面
1. 为什么需要远程控制deepin桌面? 作为一个长期使用deepin系统的开发者,我经常遇到需要在Windows电脑上远程操作deepin桌面的场景。比如在家办公时想用Windows笔记本访问公司的deepin开发机,或者给使用deepin的朋友远程解决问题。传统的Tea…...
