C++ 字符编码转换工具类

写一个C++工具类 2. 添加静态成员函数:在类中添加静态成员函数,这些函数将提供各种实用的功能。4. 提供头文件和源文件:将工具类的声明放在头文件中,并将实现放在源文件中。1. 定义类:首先,需要定义一个类来表示工具类。可以选择将其定义为静态类,这样就不需要创建对象来使用工具函数。C++工具类是一种封装了一组相关功能的类,用于提供常用的工具函数或方法。5. 编译和使用:将源文件编译为可执行文件或库文件,并在其他项目中使用该工具类。这是一个简单的C++工具类示例,你可以根据自己的需求扩展和修改工具类的功能。 阅读详情

将网上朋友写的一下工具函数稍作更改封装成了C++类,方便以面向对象的方式编程

头文件:

#ifndef EVNHELPER_H
#define EVNHELPER_H
#include <string>
#include <iostream>
using namespace std;
class EnvHelper
{
public:
	EnvHelper();
	~EnvHelper();
	static string UnicodeToANSI( const wstring& str );
	static wstring UTF8ToUnicode( const string& str );
	static wstring ANSIToUnicode( const string& str );
	static string UnicodeToUTF8( const wstring& str );
};
#endif


源文件:

#include "stdafx.h"
#include <windows.h>
#include <string>
#include <iostream>
#include "EnvHelper.h"

using namespace std;

EnvHelper::EnvHelper()
{

}
EnvHelper::~EnvHelper()
{

}

string EnvHelper::UnicodeToANSI( const wstring& str )
{
 char*     pElementText;
 int    iTextLen;
 // wide char to multi char
 iTextLen = WideCharToMultiByte( CP_ACP,
         0,
         str.c_str(),
         -1,
         NULL,
         0,
NULL,
         NULL );
 pElementText = new char[iTextLen + 1];
 memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
 ::WideCharToMultiByte( CP_ACP,
         0,
         str.c_str(),
         -1,
         pElementText,
         iTextLen,
         NULL,
         NULL );
 string strText;
 strText = pElementText;
 delete[] pElementText;
 return strText;
}

wstring EnvHelper::UTF8ToUnicode( const string& str )
{
 int  len = 0;
 len = str.length();
 int  unicodeLen = ::MultiByteToWideChar( CP_UTF8,
            0,
            str.c_str(),
            -1,
            NULL,
            0 );  
 wchar_t *  pUnicode;  
 pUnicode = new  wchar_t[unicodeLen+1];  
 memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));  
 ::MultiByteToWideChar( CP_UTF8,
         0,
         str.c_str(),
         -1,
         (LPWSTR)pUnicode,
         unicodeLen );  
 wstring  rt;  
 rt = ( wchar_t* )pUnicode;
 delete  pUnicode; 
 
 return  rt;  
}

wstring EnvHelper::ANSIToUnicode( const string& str )
{
 int  len = 0;
 len = str.length();
 int  unicodeLen = ::MultiByteToWideChar( CP_ACP,
            0,
            str.c_str(),
            -1,
            NULL,
            0 );  
 wchar_t *  pUnicode;  
 pUnicode = new  wchar_t[unicodeLen+1];  
 memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));  
 ::MultiByteToWideChar( CP_ACP,
         0,
         str.c_str(),
         -1,
         (LPWSTR)pUnicode,
         unicodeLen );  
 wstring  rt;  
 rt = ( wchar_t* )pUnicode;
 delete  pUnicode; 
 
 return  rt;  
}

string EnvHelper::UnicodeToUTF8( const wstring& str )
{
 char*     pElementText;
 int    iTextLen;
 // wide char to multi char
 iTextLen = WideCharToMultiByte( CP_UTF8,
         0,
         str.c_str(),
         -1,
         NULL,
         0,
         NULL,
         NULL );
 pElementText = new char[iTextLen + 1];
 memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
 ::WideCharToMultiByte( CP_UTF8,
         0,
         str.c_str(),
         -1,
         pElementText,
         iTextLen,
         NULL,
         NULL );
 string strText;
 strText = pElementText;
 delete[] pElementText;
 return strText;
}


 

C++跨平台字符编码转换工具类:GBK与UTF-8互转的完整实现与避坑指南 字符编码是计算机存储和处理文本的基础规则,它定义了字符与二进制数据之间的映射关系。不同的编码标准,如GBK和UTF-8,其编码原理和字符集范围存在本质差异,这导致了在跨平台、多语言数据交换时出现乱码或解码错误。为了解决这一工程实践中的常见痛点,开发者需要掌握可靠的编码转换技术。其核心价值在于确保数据在不同系统、协议间正确流通,广泛应用于文件处理、网络通信、日志解析等场景。本文聚焦于C++开发,针对GBK与UTF-8互转这一高频需求,深入剖析了其实现原理,并提供了一个封装了iconv与Windows API的 阅读详情

相关推荐

C++字符编码转换实战:从乱码到精通

字符编码是计算机系统中基础而关键的概念,涉及ASCII、Unicode、UTF-8、GBK等多种标准。不同编码方案采用不同的字节表示方式,导致跨平台或跨系统交互时容易出现乱码问题。理解编码原理后,开发者可以运用libiconv等工具库实现精准转换,解决中文显示异常、文件传输错误等常见问题。在C++开发中,正确处理字符编码对国际化应用、日志系统、网络通信等场景至关重要。通过分析'锟斤拷'等典型乱码案例,掌握编码自动检测、内存优化等进阶技巧,能显著提升软件的健壮性和兼容性。

weixin_33226548的博客 329

C++: byte和int的相互转化

byte不是一种新类型,在C++中byte被定义的是unsigned char类型;但在C#里面byte被定义的是unsigned int类型 //int转byte void  intToByte(int i,byte *bytes,int size = 4) {      //byte[] bytes = new byte[4];     memset(bytes,0,sizeof(b

PuttyTree的专栏 4万+

C++代码判断字符编码类型及编码格式转换(utf-8、gbk)

这篇文章主要是将go语言实现的版本改为C/C++版本实现,主要思路是一样的,具体思路请看: GO代码实现判断字符编码格式及编码格式转换(utf-8、gbk) 而本文更主要说明windows及linux平台下utf-8与gbk的转换。 判断是否是gbk bool isGBK(unsigned char* data, int len) { int i = 0; while (i ...

weixin_38595946的博客 1万+

C++枚举与字符串转换工具类

C++枚举与字符串转换工具类 最近需要一个能够在字符串和枚举值之间互相转换的功能,因为C++没有对枚举值进行遍历、反射之类的操作,不像Java那样可以轻松搞定。网上找到一些代码感觉用起来有点不爽,于是研究一番后,写了一个工具类。 闲话不多说,直接上代码: template <typename T> class EnumHelper { private: std::map<T, std::string> _mapEnum2String;

IT技术爱好者 2820

c++使用iconv进行字符编码格式转换

这是一个典型的C风格的函数。

hesphoros的个人博客 1398

一文带你弄懂C++中的ANSI、Unicode和UTF8三种字符编码及相互转换

本文详细介绍ANSI、Unicode和UTF8三种字符编码以及它们之间的相互转换,并给出了实际问题实例。

dvlinker的技术专栏 2万+

自定义字节转换工具类

简介 实现需求时遇到了需要进行字节转换的情况,针对面临的一些问题以及思考拓展实现了一个工具类。 基本功能如下: 自定义转换的单位区间。比如转换结果的最小单位为KB,最大单位为GB。 自定义进制数。一般来说以1024为进制数,但有时也可能会用到1000。 转换结果再处理。支持对转换结果进行保留小数、向上取整、向下取整、四舍五入等操作。 转换结果带单位。支持为结果添加单位,例如10KB。 特殊处理“零”。当转换结果为0时,往往需要展示特殊的文案,如"无可清理内容",可通过自定义接口的方式返回特殊的字符串,默认

weixin_44139159的博客 936

详解C++中的ANSI、Unicode和UTF8三种字符编码及相互转换

本文详细介绍ANSI、Unicode和UTF8三种字符编码以及它们之间的相互转换,并给出了实际问题实例。

dvlinker的技术专栏 1万+

C++中的类型转换总结

C++的类型转换总结,内置类型和自定义类型间的相互转换

m0_59382423的博客 2616

西门子博途系列学习笔记SCL(三)______自由口通讯(RS485轮询程序)

西门子博途V16系列学习笔记SCL(三)___自由口通讯轮询程序(RS485) 西门子博途系列学习笔记SCL(三)______自由口通讯(RS485轮询程序) 文章目录西门子博途V16系列学习笔记SCL(三)___自由口通讯轮询程序(RS485)前言一、FreePort自由口通讯是什么?二、使用步骤1.模块参数定义2.定义FB功能块参数:3.程序代码如下(每天写代码100行,学不会你来找我):总结 前言 很长时间都没有更新了,主要是最近在学习罗克韦尔的STUDIO5000PLC编程软件,怎么说,和博

weixin_42940283的博客 1万+

单细胞实战之数据净化三部曲:细胞周期校正、双胞体剔除与RNA污染清理——技术解析与实战指南

本文深入解析单细胞数据分析中至关重要的数据净化步骤,即细胞周期校正、双胞体剔除与RNA污染清理。通过实战代码演示与原理剖析,指导读者如何有效识别并去除技术噪音,从而获得更纯净、可靠的数据,为后续的细胞分群、差异表达等高级分析奠定坚实基础。

weixin_29274337的博客 204

Linux C/C++项目实战:如何优雅地封装iconv库,打造你自己的字符编码转换工具类

本文详细介绍了如何在Linux C/C++项目中优雅地封装iconv库,打造高可用的字符编码转换工具类。通过RAII技术管理资源、设计直观的类接口、优化缓冲区管理和线程安全策略,帮助开发者高效处理多语言字符编码转换问题,提升代码质量和开发效率。

weixin_30432579的博客 299

rfid标签技术原理

奇怪的是,RFID标签技术原理的深入剖析不仅揭示了其背后的奥秘,也让我们更加全面地认识到这一技术在数字化转型中的重要性和潜力。随着技术的不断进步和应用场景的不断拓展,RFID标签将在更多领域发挥重要作用,为物联网、智能制造等领域的发展注入新的活力。这意味着在一个读写器的覆盖范围内,可以同时读取多个RFID标签的数据,大大提高了数据收集的速度和效率。:RFID标签的“大脑”,负责存储和处理数据。芯片内部集成了存储器、控制逻辑和射频接口等电路,能够接收来自读写器的射频信号,执行相应的数据处理和通信任务。

x3088的博客 2159

自己定义宏格式化字符串 debug输出 宽窄字符转换

直接上代码 #pragma once #include <windows.h> #include <direct.h> #include <string> using namespace std; #define MAX_CHAR_COUNT 1024 std::string FormatMyStr(const char *format,...); #define MFT(format,...) FormatMyStr(format, ##__.

ya4599的博客 500

微信小程序地图开发避坑指南:腾讯地图API从配置到实战(附完整代码)

本文详细解析微信小程序中腾讯地图API的开发实践,从基础配置到高级功能实现,涵盖地图显示、地点搜索、路线规划等核心功能,并提供完整代码示例和常见问题解决方案,帮助开发者高效避坑。特别针对JavaScript SDK和map组件的使用进行了深度优化指导。

weixin_33725722的博客 486

如何制作DOS启动盘 U盘制作DOS启动盘 HP-U盘启动DOS7 详细步骤教程 Intel网卡使用软件 bootutil lanconfig eeupdate Intel网卡修改MAC地址教程

制作DOS启动盘不是一项复杂的任务,只要按照以下简单的步骤进行操作,您就可以自己动手制作一个DOS启动盘。

lcy524514826的博客 896

C++国际化字符处理:从编码原理到UTF-8实战指南

字符编码是计算机处理文本信息的基础,它定义了字符与二进制数据之间的映射规则。其核心原理在于将字符集中的码点转换为字节序列,以确保文本在不同系统间正确存储与交换。这一技术的核心价值在于支撑软件全球化,实现多语言文本的无歧义处理。在应用场景上,无论是桌面软件的本地化界面、服务端处理全球用户日志,还是网络协议中的数据交换,都离不开稳健的字符编码支持。本文聚焦于C++开发中的国际化文本处理,深入剖析了从ASCII到Unicode的演进,并针对UTF-8编码这一现代跨平台标准,提供了从编译器设置、标准库使用到构建健壮

weixin_30410119的博客 419

什么!!!寒假就要准备暑期实习

介绍暑期实习,从作用,时间线,投递渠道,技术准备,常见问题,经验教训几个方面介绍暑期实习

今天不coding的博客 1725

超级好用的C++实用库之字符编码转换

字符编码转换是指将文本数据从一种字符集编码格式转换为另一种字符集编码格式的过程。由于计算机系统和网络通信中存在多种字符编码标准,比如:ASCII、Unicode(包括UTF-8、UTF-16等变体)、GBK、ISO-8859-1等,当数据在不同的环境或系统间传输、存储时,可能需要进行编码转换以确保正确显示和处理。ASCII编码:主要用于英语字符的表示,占用一个字节,能表示128个字符。Unicode编码。

hope_wisdom的技术博客 1754

【QNX+Android虚拟化方案】129 - USB眼图参数配置

【QNX+Android虚拟化方案】129 - USB眼图参数配置

|~~~热爱生活、努力学习的小伙汁~~~| 821

用一台笔记本跑起 SAP HANA:从 express edition 的定位,到本地硬件门槛与安装实操

SAP HANA是面向个人开发者、初创团队与教学科研场景的精简发行版,保留了in-memory列存引擎、SQLScriptAFLGraphSpatial等核心能力,可免费用于开发与一定规模的生产用途(上限为 32 GB RAM)。它最大的特征,是能在资源受限的laptop或上快速落地,让你在本地完成从建模、开发到测试的完整闭环。SAP在交付形态上,提供了多种安装包:预配置的VM OVA、面向Linux的二进制安装包,以及历史上出现过的容器化方案;你可以按现有设备与熟悉的运维方式择优选择。官方文档把VM。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 534

字符编码转换

本文详细介绍了宽窄字符和字符编码之间的关系,同时归纳了两种宽窄字符转换的情况: **一种是保持原有字符编码不变,仅进行宽窄字符类型的转换**。 **另一种是即进行宽窄字符类型的转换,也进行字符编码的转换**。 并给出了对应的测试示例及测试结果。

SNAKEpc12138的博客 2053

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

c++ unicode转换中文_详解C++字符编码的转换

作者:FlushHipblog.youkuaiyun.com/flushhip/article/details/82836867【CPP开发者导读】:在处理东方语言(中日韩)时,经常会遇到各种编码问题,而且被这类问题搞的晕头转向。到网上查资料,看的也是一头雾水,最后往往是误打误撞的把问题解决了,自己仍然稀里糊涂。这篇文章介绍了如何在最常见的编码方式(Unicode, UTF-8, ANSI)之间进行...

weixin_39540271的博客 4096

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++字符编码转换

C/C++ 字符编码的转换(ut8、gb2312)

曾是土木人 892

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++字符编码格式的转换

字符编码转换: 个人学习用,如有侵权,请联系我删除 网页爬取的一般情况下为UTF-8的编码形式,而程序一般用的为Unicode编码,从网页上爬取的文字放入到TXT中,一般为乱码形式。 因此如果想要正确的输出汉字,必须进行编码转换。 C++中用的是MultiByteToWideChar和WideCharToMultiByte MultiByteToWideChar和WideCharToMultiBy...

qq_38340979的博客 2787

C++中字符编码的转换(Unicode、UTF-8、ANSI)

C++的项目,字符编码是一个大坑,不同平台之间的编码往往不一样,如果不同编码格式用一套字符读取格式读取就会出现乱码。因此,一般都是转化成UTF-8这种平台通用,且支持性很好的编码格式。 Unicode、UTF-8的概念不做过多解释,这里说一下ANSI,我第一次看到这个名词,我看成了ASCII。被Mentor狠批一顿。 ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x00 ~ 0x7...

FlushHip 6万+
上一篇: Android 多线程下载断点续传
下一篇: IOS 之 UITableView
IT回忆录
博客等级 码龄16年 42粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值