下面是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. 浅谈Shiro框架中的加密算法,以及校验

    在涉及到密码存储问题上,应该加密/生成密码摘要存储,而不是存储明文密码.为什么要加密:网络安全问题是一个很大的隐患,用户数据泄露事件层出不穷,比如12306账号泄露. Shiro提供了base64和1 ...

  2. SQL和HQL 区别浅析!!!

    hql是面向对象查询,格式:from + 类名 + 类对象 + where + 对象的属性 sql是面向数据库表查询,格式:from + 表名 + where + 表中字段 1.查询 一般在hiber ...

  3. OUC_Summer Training_ DIV2_#12(DP1) 723

    这一次是做练习,主要了解了两个算法,最大子矩阵和,最长上升子序列. 先看题好啦. A - To The Max Time Limit:1000MS     Memory Limit:32768KB   ...

  4. Install chocolatey

    Requirements Windows 7+ / Windows Server 2003+ PowerShell v2+ .NET Framework 4+ (the installation wi ...

  5. Linux字符编码默认为UTF-8,如出现乱码可设置为GBK

    Linux字符编码默认为UTF-8,如出现乱码可设置为GBK1.手动更改profile文件的命令: vi /etc/profile 也可以修改 /etc/sysconfig/i18n 文件,如 LAN ...

  6. 【log4j】log4j.properties 文件示例

    # 下面的文件内容是写程序长期要用的,放在这里留个底#Output information(higher than INFO) to stdout and file.info/debug/error ...

  7. Android跨进程通信广播(Broadcast)

    广播是一种被动跨进程通讯的方式.当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据.这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通,在应用程序中发送广播比较简单.只 ...

  8. parted对大容量磁盘进行分区

    Linux系统中MBR与GPT的区别 主引导记录(Master Boot Record , MBR)是指一个存储设备的开头 512 字节.它包含操作系统的引导器和存储设备的分区表. 全局唯一标识分区表 ...

  9. HTTP状态码分类及异常状态码处理

    1xx:表示临时响应100:(继续)请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分101:(切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换 2xx:表 ...

  10. 一百二十八:CMS系统之轮播图的编辑和删除功能

    编辑 form,继承添加的form 视图 @bp.route('/ubanners/', methods=['POST'])@login_required@permission_required(CM ...