下面是C++中字符编码格式转换(包括ANSI转换为UTF8,UTF8转换为ANSI,ANSI转换为unicode,unicode转换为ANSI,UTF8转换为unicode,unicode转换为UTF8),大小写转换等常用方法,写在这儿,免得忘掉。

头文件:

 #pragma once

 #include <string>
#include <vector> namespace Hi
{
bool replace(std::string& source, const char* old, const char* newStr); void toLower(std::string& source); void toUpper(std::string& source); /**
* @brief 将utf-8编码的字符串转换为unicode编码的字符串。
* @param[in] str utf-8编码的字符串
* @param[out] content unicode编码的字符串
* @retval true:成功,false;失败
*/
bool u82uc(const char* str, std::wstring& content); /**
* @brief 将unicode编码的字符串转换为utf-8编码的字符串。
* @param[in] str unicode编码的字符串
* @param[out] content utf-8编码的字符串
* @retval true:成功,false;失败
*/
bool uc2u8(const wchar_t* str, std::string& content); /**
* @brief 将unicode编码的字符串转换为ansi编码的字符串。
* @param[in] str unicode编码的字符串
* @param[out] content ansi编码的字符串
* @retval true:成功,false;失败
*/
bool uc2as(const wchar_t* str, std::string& content); /**
* @brief 将ansi编码的字符串转换为unicode编码的字符串。
* @param[in] str ansi编码的字符串
* @param[out] content unicode编码的字符串
* @retval true:成功,false;失败
*/
bool as2uc(const char* str, std::wstring& content); /**
* @brief 将utf-8编码的字符串转换为ansi编码的字符串。
* @param[in] str utf-8编码的字符串
* @param[out] content ansi编码的字符串
* @retval true:成功,false;失败
*/
bool u82as(const char* str, std::string& content); /**
* @brief 将utf-8编码的字符串转换为unicode编码的字符串。
* @param[in] str utf-8编码的字符串
* @param[out] content unicode编码的字符串
* @retval true:成功,false;失败
*/
bool as2u8(const char* str, std::string& content);
}
namespace Hi
{
namespace Ex
{
/**
* @brief 将utf-8编码的字符串转换为unicode编码的字符串。
* @param[in] str utf-8编码的字符串
* @retval unicode编码的字符串
* @note 如果失败,返回""
*/
std::wstring u82uc(const char* str); /**
* @brief 将unicode编码的字符串转换为utf-8编码的字符串。
* @param[in] str ansi编码的字符串
* @retval utf-8编码的字符串
* @note 如果失败,返回""
*/
std::string uc2u8(const wchar_t* str); /**
* @brief 将utf-8编码的字符串转换为unicode编码的字符串。
* @param[in] str utf-8编码的字符串
* @retval unicode编码的字符串
* @note 如果失败,返回""
*/
std::string uc2as(const wchar_t* str); /**
* @brief 将ansi编码的字符串转换为unicode编码的字符串。
* @param[in] str ansi编码的字符串
* @retval unicode编码的字符串
* @note 如果失败,返回""
*/
std::wstring as2uc(const char* str); /**
* @brief 将utf-8编码的字符串转换为ansi编码的字符串。
* @param[in] str utf-8编码的字符串
* @retval ansi编码的字符串
* @note 如果失败,返回""
*/
std::string u82as(const char* str); /**
* @brief 将ansi编码的字符串转换为utf-8编码的字符串。
* @param[in] str ansi编码的字符串
* @retval utf-8编码的字符串
* @note 如果失败,返回""
*/
std::string as2u8(const char* str);
}
}

源文件:

 #include "stdafx.h"

 #include <functional>
#include <algorithm> #include "HiString.h" using namespace std; namespace Hi
{
static bool replace_if_pr_2(char itor, char old)
{
if (itor == old)
{
return true;
}
return false;
} bool replace(string& source, const char* old, const char* newStr)
{
if (::strlen(old) == && ::strlen(newStr) == )
{
replace_if(source.begin(), source.end(),
bind2nd(ptr_fun(replace_if_pr_2), *old), *newStr); return true;
} string s1(old);
string s2(newStr); if (s1 == s2)
{
return true;
}
string::size_type pos = source.find(s1);
while (pos != string::npos)
{
source.replace(pos, s1.size(), s2);
pos = source.find(old);
} return true;
} void toLower(string& source)
{
transform(source.begin(), source.end(), source.begin(), tolower);
} void toUpper(string& source)
{
transform(source.begin(), source.end(), source.begin(), toupper);
}
bool u82uc(const char* str, wstring& content)
{
int textlen ;
wchar_t * result;
textlen = MultiByteToWideChar( CP_UTF8, , str,-, NULL, );
result = (wchar_t *)malloc((textlen+)*sizeof(wchar_t));
::memset(result,,(textlen+)*sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, ,str,-,(LPWSTR)result,textlen); content = result;
free(result); return true;
} bool uc2as(const wchar_t* str, string& content)
{
char* result;
int textlen;
textlen = WideCharToMultiByte(CP_ACP, , str, -, NULL, , NULL, NULL );
result =(char *)malloc((textlen+)*sizeof(char));
memset( result, , sizeof(char) * ( textlen + ) );
WideCharToMultiByte( CP_ACP, , str, -, result, textlen, NULL, NULL ); content = result;
free(result); return true;
} bool u82as(const char* str, string& content)
{
wstring temp;
u82uc(str, temp);
return uc2as(temp.c_str(), content);
} bool as2uc(const char* str, wstring& content)
{
int textlen ;
wchar_t * result;
textlen = MultiByteToWideChar(CP_ACP, , str,-, NULL, );
result = (wchar_t *)malloc((textlen+)*sizeof(wchar_t));
::memset(result,,(textlen+)*sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, ,str,-,(LPWSTR)result,textlen); content = result;
free(result);
return true;
} bool uc2u8(const wchar_t* str, string& content)
{
char* result;
int textlen;
textlen = WideCharToMultiByte(CP_UTF8, , str, -, NULL, , NULL, NULL );
result =(char *)malloc((textlen+)*sizeof(char));
memset( result, , sizeof(char) * ( textlen + ) );
WideCharToMultiByte( CP_UTF8, , str, -, result, textlen, NULL, NULL ); content = result;
free(result); return true;
} bool as2u8(const char* str, string& content)
{
wstring temp;
as2uc(str, temp);
return uc2u8(temp.c_str(), content);
}
} namespace Hi
{
namespace Ex
{
wstring u82uc(const char* str)
{
wstring temp;
if (Hi::u82uc(str, temp))
{
return temp;
} return L"";
} string uc2as(const wchar_t* str)
{
string temp;
if (Hi::uc2as(str, temp))
{
return temp;
} return "";
} string u82as(const char* str)
{
string temp;
if (Hi::u82as(str, temp))
{
return temp;
} return "";
} string as2u8(const char* str)
{
string temp;
if (Hi::as2u8(str, temp))
{
return temp;
} return "";
} wstring as2uc(const char* str)
{
wstring temp;
if (Hi::as2uc(str, temp))
{
return temp;
} return L"";
} string uc2u8(const wchar_t* str)
{
string temp;
if (Hi::uc2u8(str, temp))
{
return temp;
} return "";
}
}
}

C++字符转换等常用方法的更多相关文章

  1. Java第三十三天,IO操作(续集),字符转换流

    计算机都是以二进制码格式存储文件的,但是在读写文件的过程中,每个应用程序都有自己的编码格式.FileWrite和FileRead类是通过查询系统默认码表进行读写的,因此在自己的系统上能够实现编码的智能 ...

  2. 【JavaScript】JS 中 原始字符串 和 HTML 字符转换

    参考资料:http://www.sjyhome.com/javascript/js-html-escape.html JS转换HTML转义符 SJY • 发表于:2013年10月05日 17:04 • ...

  3. 带毫秒的字符转换成时间(DateTime)格式的通用方法

    C#自身有更好的方式,Net任意String格式转换为DateTime类型 ====================================================== 原文 ==== ...

  4. sql字符转换函数大全

    删除空格 有两个函数,TTRIM()和LTRIM(),可以用来从字符串中剪掉空格.函数LTRIM()去除应该字符串前面的所有空格:函数RTRIM()去除一个字符串尾部的所有空格.这些和vbscript ...

  5. python_way,day3 集合、函数、三元运算、lambda、python的内置函数、字符转换、文件处理

    python_way,day3 一.集合 二.函数 三.三元运算 四.lambda 五.python的内置函数 六.字符转换 七.文件处理 一.集合: 1.集合的特性: 特性:无序,不重复的序列 如果 ...

  6. js字符转换成整型 parseInt()函数规程Number()函数

    今天在做一个js加法的时候,忘记将字符转换成整型,导致将加号认为是连接符,  在运算前要先对字符井行类型转换,使用parseInt()函数   使用Number()将字符转换成int型效果更好

  7. mysql将字符转换成数字

    在操作mysql时,经常需要将字符转换成数字,这一步虽然简单,但不常用的话也很容易忘记,现将在网上找到的方法记录如下: 1.将字符的数字转成数字,比如'0'转成0可以直接用加法来实现例如:将pony表 ...

  8. CString string char* char 之间的字符转换(多种方法)

    在写程序的时候,我们经常遇到各种各样的类型转换,比如 char* CString string 之间的互相转换.首先解释下三者的含义. CString 是一种很有用的数据类型.它们很大程度上简化了MF ...

  9. Linux c字符串中不可打印字符转换成16进制

    本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的 ...

随机推荐

  1. 记一次springboot+mybatis+phoenix在代码集成中的坑

    场景: 希望使用phoenix做查询服务,给服务端提供接口 设计: 通过springboot做restful的接口发布,通过mybatis做phoenix的sql处理,因此是springboot+my ...

  2. dcokee 安装 nginx

    1,docker pull openresty/openresty 2, mkdir  /opt/local/openresty  等等文件夹 3, docker run  --name=" ...

  3. Python控制台输出时刷新当前行内容而不是输出新行

    需求目标 执行Python程序的时候在控制台输出内容的时候固定一刷新内容,如下: Downloading File FooFile.txt [%] 而不是 Downloading File FooFi ...

  4. 【分类模型评判指标 一】混淆矩阵(Confusion Matrix)

    转自:https://blog.csdn.net/Orange_Spotty_Cat/article/details/80520839 略有改动,仅供个人学习使用 简介 混淆矩阵是ROC曲线绘制的基础 ...

  5. moveDown()

    这里在判断边界时,判断的是 y == HEIGHT - 1. void moveDown(){ //定义变量存放人物下方的坐标 int dx, dy; //当下方没有元素时,直接return if(y ...

  6. spark 常用函数介绍(python)

    以下是个人理解,一切以官网文档为准. http://spark.apache.org/docs/latest/api/python/pyspark.html 在开始之前,我先介绍一下,RDD是什么? ...

  7. java不用中间变量交换两个值

    public void changeVal(){ int a = 2; int b = 3; System.out.println("交换前 a:"+a+",b:&quo ...

  8. vue-cli3.0 初体验

    vue-cli3.0 自我记录 其实在2018年8月10号,vue-cli3.0就已经面世了,由于项目中应用的全是2.x版本,所以并不了解3.0的vue-cli发生了什么变化,那今天尝试了下遇见的问题 ...

  9. ps在psd格式图片里面切图流程

    第一. 第二. xx的地方自己重新命名 第三. 第四.

  10. 在业务控制方法中写入User,Admin多个模型收集参数

    1)  可以在业务控制方法中书写1个模型来收集客户端的参数 2)  模型中的属性名必须和客户端参数名一一对应 3)  这里说的模型不是Model对象,Model是向视图中封装的数据 @Controll ...