工具类CTools实现字符编码转换和获取当前路径

class CTools
{
public:
    CTools(void);
public:
    ~CTools(void);
public:
    static std::string UNICODE_to_UTF8(const CString& unicodeString);
    static CString UTF8_to_UNICODE(const std::string& utf8_string);
    static std::string ws2s(std::wstring& inputws);
    static std::wstring s2ws(const std::string& s);

    static std::string UNICODE_to_ANSI(const CString& unicodeString);
    static CString ANSI_to_UNICODE(const std::string& utf8_string);

    static std::string GetFullPath(void);
};

CTools::CTools(void)
{
}

CTools::~CTools(void)
{
}

std::string CTools::UNICODE_to_UTF8(const CString& unicodeString)
{
    int stringLength = ::WideCharToMultiByte(CP_UTF8, NULL, unicodeString, (int)wcslen(unicodeString), NULL, 0, NULL, NULL);

    char* buffer = new char[stringLength + 1];
    ::WideCharToMultiByte(CP_UTF8, NULL, unicodeString, (int)wcslen(unicodeString), buffer, stringLength, NULL, NULL);
    buffer[stringLength] = ‘\0‘;

    std::string str = buffer;

    delete[] buffer;

    return str;
}

CString CTools::UTF8_to_UNICODE(const std::string& utf8_string)
{
    int length = (int)utf8_string.size();

    int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, utf8_string.c_str(), length, NULL, 0);
    wchar_t* wszString = new wchar_t[wcsLen + 1];
    ::MultiByteToWideChar(CP_UTF8, NULL, utf8_string.c_str(), length, wszString, wcsLen);
    wszString[wcsLen] = ‘\0‘;
    CString unicodeText(wszString);
    delete[] wszString;

    return unicodeText;
}

std::string CTools::UNICODE_to_ANSI(const CString& unicodeString)
{
    int stringLength = ::WideCharToMultiByte(CP_ACP, NULL, unicodeString, (int)wcslen(unicodeString), NULL, 0, NULL, NULL);

    char* buffer = new char[stringLength + 1];
    ::WideCharToMultiByte(CP_ACP, NULL, unicodeString, (int)wcslen(unicodeString), buffer, stringLength, NULL, NULL);
    buffer[stringLength] = ‘\0‘;

    std::string str = buffer;

    delete[] buffer;

    return str;
}

CString CTools::ANSI_to_UNICODE(const std::string& utf8_string)
{
    int length = (int)utf8_string.size();

    int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, utf8_string.c_str(), length, NULL, 0);
    wchar_t* wszString = new wchar_t[wcsLen + 1];
    ::MultiByteToWideChar(CP_ACP, NULL, utf8_string.c_str(), length, wszString, wcsLen);
    wszString[wcsLen] = ‘\0‘;
    CString unicodeText(wszString);
    delete[] wszString;

    return unicodeText;
}

std::string CTools::ws2s(std::wstring& inputws)
{
    return UNICODE_to_UTF8(inputws.c_str());
}

std::wstring CTools::s2ws(const std::string& s)
{
    CString cstr = UTF8_to_UNICODE(s);
    return cstr.GetBuffer(cstr.GetLength());
}

std::string CTools::GetFullPath(void)
 {
     HMODULE h = GetModuleHandle(L"Test.exe");
     wchar_t exeFullPath[MAX_PATH]; // MAX_PATH在API中有定义,为128
     int len=GetModuleFileName(h,
         exeFullPath, //应用程序的全路径存放地址
         MAX_PATH);
     std::wstring wstrpath = exeFullPath;
     std::string strpath = CTools::ws2s(wstrpath);
     size_t nPos;
     nPos=strpath.rfind(‘\\‘);
     return strpath.substr(0,nPos);
 }
时间: 2024-10-14 02:33:59

工具类CTools实现字符编码转换和获取当前路径的相关文章

工具类涉及数据库连接、格式转换、文件操作、发送邮件等等

数据库连接工具类 数据库连接工具类——仅仅获得连接对象 ConnDB.javaimport java.sql.Connection; import java.sql.DriverManager; /** * 数据库连接工具类——仅仅获得连接对象 * */ public class ConnDB { private static Connection conn = null; private static final String DRIVER_NAME = "com.mysql.jdbc.Dri

iconv字符编码转换

转自 http://blog.csdn.net/langresser_king/article/details/7459367 iconv(http://www.gnu.org/software/libiconv/)是一个开源的字符编码转换库,可以"方便"的完成几乎所有的编码转换工作.说简单是因为,它常用的接口就三个,iconv_open  iconv   iconv_close,但是即便是只有三个接口,要想使用正确也不容易.这里把一些基本概念和使用细节记录下来,希望能成为一篇最实用的

php字符编码转换之gb2312转为utf8(转)

在php中字符编码转换我们一般会用到iconv与mb_convert_encoding进行操作,但是mb_convert_encoding在转换性能上比iconv要差很多哦.string iconv ( string in_charset, string out_charset, string str ) 注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符

Windows下字符编码转换

有时候经常使用别人用Tabhost+其它的实现demo.单纯利用Tabhost该如何使用呢? 下面看例子: public class MainActivity extends TabActivity { public TabHost tabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 获取对象 tabHost = getTabH

erlang中字符编码转换(转)

转自:http://www.thinksaas.cn/group/topic/244329/ 功能说明: erlang中对各种语言的编码支持不足,此代码是使用erlang驱动了著名的iconv编码库来对字符进行编码转换处理. 文件说明: iconv_erl.c和iconv.h 是erlang字符编码模块的driver,作用是对iconv进行封装.编译后生成iconv_erl.dll,供iconv.erl使用. iconv_makefile.win32 windows上编译iconv_erl.dl

php 字符编码转换函数 iconv mb_convert_encoding比较

在使用PHP处理字符串时,我们经常会碰到字符编码转换的问题,你碰到过iconv转换失败吗? 发现问题时,网上搜了搜,才发现iconv原来有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时,可以稍微弥补一下默认缺陷,不至于无法转换是截断,用法如下 iconv(“UTF-8″,”GB2312//IGNORE”,$data) ; 这样碰到生僻字转换失败时,它就会忽略失败,继续转换下面的内容,这算解决问题的一个办法,不过为了确保转换的成功率,我们可以用另一个转换函数(mb_convert_e

ASP中有关字符编码转换的几个有用函数

ASP中有关字符编码转换的几个有用函数 <%1.'UTF转GB---将UTF8编码文字转换为GB编码文字function UTF2GB(UTFStr) for Dig=1 to len(UTFStr)   '如果UTF8编码文字以%开头则进行转换  if mid(UTFStr,Dig,1)="%" then      'UTF8编码文字大于8则转换为汉字    if len(UTFStr) >= Dig+8 then        GBStr=GBStr & Con

python基础 字符编码转换

python2 1 #python2上所有的字符编码都需要先decode到unicode,再从unicode encode到目标编码 2 str_utf8 = "我就是我" 3 print("str_utf-8:我就是我:",str_utf8) 4 #将utf-8转换为unicode 5 str_utf8_to_unicode = str_utf8.decode("utf-8") 6 print(str_utf8_to_unicode) 7 #将

C++ 字符编码转换类

记录一下C++ 编码转换的函数: 1 #pragma once 2 #include "afx.h" 3 4 5 #define DEFAULT_CODE 0 6 #define CHINESE_SIMPLIFIED 1 7 #define CHINESE_TRADITIONAL 2 8 9 class CChineseConvertor: 10 //public CObject 11 { 12 public: 13 CChineseConvertor(void); 14 ~CChin