C++中ASCII、unicode与Utf8之间的相互转化

来源:互联网 发布:淘宝华元宠物东西真吗 编辑:程序博客网 时间:2024/06/10 13:48

头文件:UTN.h

[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. #pragma once  
  2. #include "stdafx.h"  
  3. #include "windows.h"  
  4. #include <iostream>  
  5. #include <string>  
  6. using namespace std;  
  7.   
  8. //**************string******************//  
  9. // ASCII与Unicode互转  
  10. wstring AsciiToUnicode(const string& str);  
  11. string  UnicodeToAscii(const wstring& wstr);  
  12. // UTF8与Unicode互转  
  13. wstring Utf8ToUnicode(const string& str);  
  14. string  UnicodeToUtf8(const wstring& wstr);  
  15. // ASCII与UTF8互转  
  16. string  AsciiToUtf8(const string& str);  
  17. string  Utf8ToAscii(const string& str);  
  18. //**************CString******************//  
  19. // ASCII与Unicode互转  
  20. CStringW    AsciiToUnicode_CSTR(const CStringA& str);  
  21. CStringA    UnicodeToAscii_CSTR(const CStringW& wstr);  
  22. // UTF8与Unicode互转  
  23. CStringW    Utf8ToUnicode_CSTR(const CStringA& str);  
  24. CStringA    UnicodeToUtf8_CSTR(const CStringW& wstr);  
  25. // ASCII与UTF8互转  
  26. CStringA    AsciiToUtf8_CSTR(const CStringA& str);  
  27. CStringA    Utf8ToAscii_CSTR(const CStringA& str);  
  28. /************string-int***************/  
  29. // string 转 Int  
  30. int StringToInt(const string& str);  
  31. string IntToString(int i);  
  32. string IntToString(char i);  
  33. string IntToString(double i);  



cpp文件:UTN.cpp

[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. #pragma once  
  2. #include "stdafx.h"  
  3. #include "UTN.h"  
  4.   
  5. wstring AsciiToUnicode(const string& str) {  
  6.     // 预算-缓冲区中宽字节的长度    
  7.     int unicodeLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, nullptr, 0);  
  8.     // 给指向缓冲区的指针变量分配内存    
  9.     wchar_t *pUnicode = (wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);  
  10.     // 开始向缓冲区转换字节    
  11.     MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, pUnicode, unicodeLen);  
  12.     wstring ret_str = pUnicode;  
  13.     free(pUnicode);  
  14.     return ret_str;  
  15. }  
  16. string UnicodeToAscii(const wstring& wstr) {  
  17.     // 预算-缓冲区中多字节的长度    
  18.     int ansiiLen = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);  
  19.     // 给指向缓冲区的指针变量分配内存    
  20.     char *pAssii = (char*)malloc(sizeof(char)*ansiiLen);  
  21.     // 开始向缓冲区转换字节    
  22.     WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);  
  23.     string ret_str = pAssii;  
  24.     free(pAssii);  
  25.     return ret_str;  
  26. }  
  27. wstring Utf8ToUnicode(const string& str) {  
  28.     // 预算-缓冲区中宽字节的长度    
  29.     int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, nullptr, 0);  
  30.     // 给指向缓冲区的指针变量分配内存    
  31.     wchar_t *pUnicode = (wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);  
  32.     // 开始向缓冲区转换字节    
  33.     MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, pUnicode, unicodeLen);  
  34.     wstring ret_str = pUnicode;  
  35.     free(pUnicode);  
  36.     return ret_str;  
  37. }  
  38. string UnicodeToUtf8(const wstring& wstr) {  
  39.     // 预算-缓冲区中多字节的长度    
  40.     int ansiiLen = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);  
  41.     // 给指向缓冲区的指针变量分配内存    
  42.     char *pAssii = (char*)malloc(sizeof(char)*ansiiLen);  
  43.     // 开始向缓冲区转换字节    
  44.     WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);  
  45.     string ret_str = pAssii;  
  46.     free(pAssii);  
  47.     return ret_str;  
  48. }  
  49. string AsciiToUtf8(const string& str) {  
  50.     return UnicodeToUtf8(AsciiToUnicode(str));  
  51. }  
  52. string Utf8ToAscii(const string& str) {  
  53.     return UnicodeToAscii(Utf8ToUnicode(str));  
  54. }  
  55. // ASCII与Unicode互转  
  56. CStringW    AsciiToUnicode_CSTR(const CStringA& str) {  
  57.     return AsciiToUnicode(LPCSTR(str)).c_str();  
  58. }  
  59. CStringA    UnicodeToAscii_CSTR(const CStringW& wstr) {  
  60.     return UnicodeToAscii(LPCWSTR(wstr)).c_str();  
  61. }  
  62. // UTF8与Unicode互转  
  63. CStringW    Utf8ToUnicode_CSTR(const CStringA& str) {  
  64.     return Utf8ToUnicode(LPCSTR(str)).c_str();  
  65. }  
  66. CStringA    UnicodeToUtf8_CSTR(const CStringW& wstr) {  
  67.     return UnicodeToUtf8(LPCWSTR(wstr)).c_str();  
  68. }  
  69. // ASCII与UTF8互转  
  70. CStringA    AsciiToUtf8_CSTR(const CStringA& str) {  
  71.     return UnicodeToUtf8_CSTR(AsciiToUnicode_CSTR(str));  
  72. }  
  73. CStringA    Utf8ToAscii_CSTR(const CStringA& str) {  
  74.     return UnicodeToAscii_CSTR(Utf8ToUnicode_CSTR(str));  
  75. }  
  76. // string 与 Int 互转  
  77. int StringToInt(const string& str) {  
  78.     return atoi(str.c_str());  
  79. }  
  80. string IntToString(int i) {  
  81.     char ch[1024];  
  82.     memset(ch, 0, 1024);  
  83.     sprintf_s(ch, sizeof(ch), "%d", i);  
  84.     return ch;  
  85. }  
  86. string IntToString(char i) {  
  87.     char ch[1024];  
  88.     memset(ch, 0, 1024);  
  89.     sprintf_s(ch, sizeof(ch), "%c", i);  
  90.     return ch;  
  91. }  
  92. string IntToString(double i) {  
  93.     char ch[1024];  
  94.     memset(ch, 0, 1024);  
  95.     sprintf_s(ch, sizeof(ch), "%f", i);  
  96.     return ch;  
  97. }  


UTF8和UnICODE转换

[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. CString CNoviewPDlg::AsciiToUnicode(CStringA szStringA)  
  2. {  
  3.     string str = szStringA.GetBuffer(0);  
  4.     // 预算-缓冲区中宽字节的长度      
  5.     int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, nullptr, 0);  
  6.     // 给指向缓冲区的指针变量分配内存      
  7.     wchar_t *pUnicode = (wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);  
  8.     // 开始向缓冲区转换字节      
  9.     MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, pUnicode, unicodeLen);  
  10.     wstring ret_str = pUnicode;  
  11.     free(pUnicode);  
  12.     return CString(ret_str.c_str());  
  13. }  
  14. CStringA CNoviewPDlg::UnicodeToAscii(CString szString)  
  15. {  
  16.     wstring wstr = szString.GetBuffer(0);  
  17.     // 预算-缓冲区中多字节的长度      
  18.     int ansiiLen = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);  
  19.     // 给指向缓冲区的指针变量分配内存      
  20.     char *pAssii = (char*)malloc(sizeof(char)*ansiiLen);  
  21.     // 开始向缓冲区转换字节      
  22.     WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);  
  23.     string ret_str = pAssii;  
  24.     free(pAssii);  
  25.     return CStringA(ret_str.c_str());  
  26. }  
0 0
原创粉丝点击