下面是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. 删除Linux系统多余的引导

    问题: 电脑中安装了多个Linux系统,需要删除不用的Linux系统的引导 解决方法: open terminal: su -     切换root用户 cd /boot/ ls ... grub  ...

  2. Qt 单元测试

      使用Qtcreator 自带的单元测试工具框架QTestlib进行测试. 一.创建一个单元测试程序 new project->other project ->Qt unit test ...

  3. 阿里云Ubuntu 16 FTP安装配置注意事项

    1. 开放端口设置 阿里云控制台添加"安全组规则". 1) 21: FTP端口; 2) 15000~15100: 对应vsftpd.conf 自定义配置. (重要!) pasv_e ...

  4. JDK与CGlib动态代理的实现

    应用的原型为 执行者:房屋中介Agency(分为JDKAgency.CGlibAgency) 被代理对象:程序员Programmer 被代理对象的实现接口:租户Tenement(CGlibAgency ...

  5. UML建模综述

    一.概念 UML-Unified Model Language 统一建模语言,又称标准建模语言.是用来对软件密集系统进行可视化建模的一种语言.作为一个支持模型化和软件系统开发的图形化语言,UML为软件 ...

  6. golang实现生产者消费者模型

    生产者消费者模型分析 操作系统中的经典模型,由若干个消费者和生产者,消费者消耗系统资源,生产者创造系统资源,资源的数量要保持在一个合理范围(小于数量上限,大约0).而消费者和生产者是通过并发或并行方式 ...

  7. React Native的ListView的布局使用

    1> ListView组件用于显示一个垂直的滚动列表,其中的元素之间结构近似而仅数据不同. ListView更适于长列表数据,且元素个数可以增删.和ScrollView不同的是,ListView ...

  8. .Netcore 2.0 Ocelot Api网关教程(2)- 路由

    .Netcore 2.0 Ocelot Api网关教程(1) 路由介绍 上一篇文章搭建了一个简单的Api网关,可以实现简单的Api路由,本文介绍一下路由,即配置文件中ReRoutes,ReRoutes ...

  9. Java和SQL取两个字符间的值

    Java String str = "abcdefg"; String result = str.substring(str.indexOf(">")+1 ...

  10. 【CSS】我的样式哪里来的?—— css的继承性

    在之前我们写css的时候,曾经出现过如下这样一种情况: 6继承性.html(head部分) <style> div { background-color: #ccc; font-size: ...