下面是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. docker部署TX-LCN5.0.2

    主要是在配置tx-lcn.manager.host时需要特别注意下,应该安装如下配置进行 tx-lcn: manager: host: 0.0.0.0 port: 8070 heart-time: 1 ...

  2. FFmpeg之av_register_all()

    1. av_register_all() 该函数位于 libavformat/allformats.c 中. 该函数主要是注册所有的编解码器.复用/解复用组件等. /* * Initialize li ...

  3. 【软件工程】Beta冲刺(1/5)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 tomcat的学习与实现 服务器后端部署,API接口的beta版实现 后端代码 ...

  4. [Mybatis]执行一句Sql返回一个List<String>

    在Mapper.xml如下书写SQL文,其中 resultType告知MyBatis返回的类型: <select id="selectExpiredDate" resultT ...

  5. 自定义zabbix脚本--网卡平均流量

    自定义zabbix脚本--网卡平均流量1. 在客户端修改配置文件 /etc/zabbix/zabbix_agentd.conf需要改动两个地方:(1) UnsafeUserParameters=1(2 ...

  6. Django View视图

    视图view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者 ...

  7. SQL Server 新建 数据库关系图 时弹出警告提示此数据库没有有效所有者,因此无法安装数据库关系图支持对象。

    今天创建数据库关系图,发现提示此数据库没有有效所有者,因此无法安装数据库关系图支持对象.若要继续,请首先使用 数据库属性 对话框的文件页或 ALTER AUTHORIZAITION 语句将数据库所有者 ...

  8. SrpingMVC通过JSON注入from数据到实体自定义(LocalDateTime,LocalDate,Boolean类型)字段的序列化、反序列化方法

    import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingExcept ...

  9. TextInput组件的常用属性

    1.TextInput组件基本介绍: TextInput是一个允许用户在应用中通过键盘输入文本的基本组件.本组件的属性提供了多种特性的配置,譬如自动完成.自动大小写.占位文字,以及多种不同的键盘类型( ...

  10. playbook部署flanneld

    定义playbook的主机组 说明: 1.playbook的主机组和ansible的主机组不一样, 2.playbook的主机组文件必须要和playbook文件在同一个目录下否则会报如下错误: [ro ...