C++中ASCII、unicode与Utf8之间的相互转化
头文件:UTN.h
- #pragma once
- #include "stdafx.h"
- #include "windows.h"
- #include <iostream>
- #include <string>
- using namespace std;
- //**************string******************//
- // ASCII与Unicode互转
- wstring AsciiToUnicode(const string& str);
- string UnicodeToAscii(const wstring& wstr);
- // UTF8与Unicode互转
- wstring Utf8ToUnicode(const string& str);
- string UnicodeToUtf8(const wstring& wstr);
- // ASCII与UTF8互转
- string AsciiToUtf8(const string& str);
- string Utf8ToAscii(const string& str);
- //**************CString******************//
- // ASCII与Unicode互转
- CStringW AsciiToUnicode_CSTR(const CStringA& str);
- CStringA UnicodeToAscii_CSTR(const CStringW& wstr);
- // UTF8与Unicode互转
- CStringW Utf8ToUnicode_CSTR(const CStringA& str);
- CStringA UnicodeToUtf8_CSTR(const CStringW& wstr);
- // ASCII与UTF8互转
- CStringA AsciiToUtf8_CSTR(const CStringA& str);
- CStringA Utf8ToAscii_CSTR(const CStringA& str);
- /************string-int***************/
- // string 转 Int
- int StringToInt(const string& str);
- string IntToString(int i);
- string IntToString(char i);
- string IntToString(double i);
cpp文件:UTN.cpp
- #pragma once
- #include "stdafx.h"
- #include "UTN.h"
- wstring AsciiToUnicode(const string& str) {
- // 预算-缓冲区中宽字节的长度
- int unicodeLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, nullptr, 0);
- // 给指向缓冲区的指针变量分配内存
- wchar_t *pUnicode = (wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);
- // 开始向缓冲区转换字节
- MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, pUnicode, unicodeLen);
- wstring ret_str = pUnicode;
- free(pUnicode);
- return ret_str;
- }
- string UnicodeToAscii(const wstring& wstr) {
- // 预算-缓冲区中多字节的长度
- int ansiiLen = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);
- // 给指向缓冲区的指针变量分配内存
- char *pAssii = (char*)malloc(sizeof(char)*ansiiLen);
- // 开始向缓冲区转换字节
- WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);
- string ret_str = pAssii;
- free(pAssii);
- return ret_str;
- }
- wstring Utf8ToUnicode(const string& str) {
- // 预算-缓冲区中宽字节的长度
- int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, nullptr, 0);
- // 给指向缓冲区的指针变量分配内存
- wchar_t *pUnicode = (wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);
- // 开始向缓冲区转换字节
- MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, pUnicode, unicodeLen);
- wstring ret_str = pUnicode;
- free(pUnicode);
- return ret_str;
- }
- string UnicodeToUtf8(const wstring& wstr) {
- // 预算-缓冲区中多字节的长度
- int ansiiLen = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);
- // 给指向缓冲区的指针变量分配内存
- char *pAssii = (char*)malloc(sizeof(char)*ansiiLen);
- // 开始向缓冲区转换字节
- WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);
- string ret_str = pAssii;
- free(pAssii);
- return ret_str;
- }
- string AsciiToUtf8(const string& str) {
- return UnicodeToUtf8(AsciiToUnicode(str));
- }
- string Utf8ToAscii(const string& str) {
- return UnicodeToAscii(Utf8ToUnicode(str));
- }
- // ASCII与Unicode互转
- CStringW AsciiToUnicode_CSTR(const CStringA& str) {
- return AsciiToUnicode(LPCSTR(str)).c_str();
- }
- CStringA UnicodeToAscii_CSTR(const CStringW& wstr) {
- return UnicodeToAscii(LPCWSTR(wstr)).c_str();
- }
- // UTF8与Unicode互转
- CStringW Utf8ToUnicode_CSTR(const CStringA& str) {
- return Utf8ToUnicode(LPCSTR(str)).c_str();
- }
- CStringA UnicodeToUtf8_CSTR(const CStringW& wstr) {
- return UnicodeToUtf8(LPCWSTR(wstr)).c_str();
- }
- // ASCII与UTF8互转
- CStringA AsciiToUtf8_CSTR(const CStringA& str) {
- return UnicodeToUtf8_CSTR(AsciiToUnicode_CSTR(str));
- }
- CStringA Utf8ToAscii_CSTR(const CStringA& str) {
- return UnicodeToAscii_CSTR(Utf8ToUnicode_CSTR(str));
- }
- // string 与 Int 互转
- int StringToInt(const string& str) {
- return atoi(str.c_str());
- }
- string IntToString(int i) {
- char ch[1024];
- memset(ch, 0, 1024);
- sprintf_s(ch, sizeof(ch), "%d", i);
- return ch;
- }
- string IntToString(char i) {
- char ch[1024];
- memset(ch, 0, 1024);
- sprintf_s(ch, sizeof(ch), "%c", i);
- return ch;
- }
- string IntToString(double i) {
- char ch[1024];
- memset(ch, 0, 1024);
- sprintf_s(ch, sizeof(ch), "%f", i);
- return ch;
- }
UTF8和UnICODE转换
- CString CNoviewPDlg::AsciiToUnicode(CStringA szStringA)
- {
- string str = szStringA.GetBuffer(0);
- // 预算-缓冲区中宽字节的长度
- int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, nullptr, 0);
- // 给指向缓冲区的指针变量分配内存
- wchar_t *pUnicode = (wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);
- // 开始向缓冲区转换字节
- MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, pUnicode, unicodeLen);
- wstring ret_str = pUnicode;
- free(pUnicode);
- return CString(ret_str.c_str());
- }
- CStringA CNoviewPDlg::UnicodeToAscii(CString szString)
- {
- wstring wstr = szString.GetBuffer(0);
- // 预算-缓冲区中多字节的长度
- int ansiiLen = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);
- // 给指向缓冲区的指针变量分配内存
- char *pAssii = (char*)malloc(sizeof(char)*ansiiLen);
- // 开始向缓冲区转换字节
- WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);
- string ret_str = pAssii;
- free(pAssii);
- return CStringA(ret_str.c_str());
- }
C++中ASCII、unicode与Utf8之间的相互转化相关推荐
- linux ascii转换 utf8,C++中ASCII、unicode与Utf8之间的相互转化
一.windows下转换方法: // 当type为CP_ACP时,GBK转化为UNICODE:当type为CP_UTF8时,UTF8转化为UNICODE wchar_t* trans(const ch ...
- 彻底搞清楚ASCII,Unicode和UTF-8之间的关系
转载自:https://blog.csdn.net/Deft_MKJing/article/details/79460485 前言 平时喜欢写东西,看博客,一直对编码有些懵,今天下午也不知道看到了什么 ...
- [字符集]Unicode和UTF-8之间的转换详解
最近在用VC++开发一个小工具,平时用惯了.NET,用起VC++最郁闷的就是字符串处理.当然最最让人难于琢磨的就是字符集,编码之间的转换.通过这几天的研究,终于明白了Unicode和UTF-8 ...
- 字符集和编码规范:ASCII,Unicode和UTF-8, latin1,BIG5,GBK
字符集和编码方式:ASCII,Unicode和UTF-8, latin1,BIG5,GBK 参考: 字符集 字符集编码详解 一. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制 ...
- Unicode和UTF-8之间的转换详解
Unicode是一个字符集,而UTF-8是 Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1 个字节.U ...
- Unicode 和 UTF-8 之间的关系
一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是说,一个 ...
- 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)
参考博客: Unicode与UTF-8互转(C语言实现):http://blog.csdn.net/tge7618291/article/details/7599902 汉字 Unicode 编码范围 ...
- 字符编码:Unicode和UTF-8之间的关系
Unicode和UTF-8之间的关系 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256 ...
- 在Linux C编程中使用Unicode和UTF-8
在Linux C编程中使用Unicode和UTF-8 目前各种Linux发行版都支持UTF-8编码,当前系统的语言和字符编码设置保存在一些环境变量中,可以通过locale命令查看: $ locale ...
最新文章
- Hdu_2063 过山车 -最大匹配(邻接表版)
- 阿里发布图计算平台GraphScope,即将向全社会开源
- 精选四款命令行「神器」:美、快、爽!
- 算法 - php - 二叉树遍历
- boost::hana::ap用法的测试程序
- TIBCO产品的微服务和DevOps
- 编转码、CDN和AI是如何撑起短视频数百亿市场规模的
- mysql sql注入工具_基础篇——SQL注入(工具注入)
- jpadao层继承什么_实木复合地板特点是什么
- 基于 CNN 和迁移学习的农作物病害识别方法研究
- 【多任务】如何利用多任务学习提升模型性能?
- 一个好用的不基于时间的同步文件的软件 —— Allway sync 文件同步
- vs2010专业版下载链接
- opencv-车牌识别
- 概率论基础(一):条件均值与全期望公式
- java sort 降序_详解Java sort()数组排序(升序和降序)
- 全面解读java虚拟机(面试考点大全)d
- 【年度总结 | 2022】想干什么就去干吧,少年
- UE4 用C++构建自定义材质 完成视频抠像
- 内核aio_AIO 简介
热门文章
- 数据库-优化-数据库结构的优化-拆分优化
- StringBuilder的toString方法
- Redisson框架框架集成
- 计算机设备抽象,计算机系统原理(三) 金字塔形的存储设备、操作系统的抽象概念...
- kafka技术内幕(二)
- python之路day9_亮仔的Python之路Day9——Python知识体系重组
- 互联网协议套件(TCP/IP)及七层OSI模型
- Linux下静态库的创立与使用
- parseInt和parseFloat(转换成数字,提取成数字)?
- ICC_lab总结——ICC_lab6:版图完成