2025年字符转编码(字符串转码)

字符转编码(字符串转码)include lt string gt include lt windows h gt include lt vector gt using namespace std utf8 转 Unicode std wstring Utf82Unicode const std string amp

大家好,我是讯享网,很高兴认识大家。



#include<string> #include<windows.h> #include<vector> using namespace std;

讯享网

//utf8 转 Unicode

std::wstring Utf82Unicode(const std::string& utf8string) {

讯享网</span><span style="color: rgba(0, 0, 255, 1)">int</span> widesize = ::MultiByteToWideChar(CP_UTF8, <span style="color: rgba(128, 0, 128, 1)">0</span>, utf8string.c_str(), -<span style="color: rgba(128, 0, 128, 1)">1</span>, NULL, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (widesize ==<span style="color: rgba(0, 0, 0, 1)"> ERROR_NO_UNICODE_TRANSLATION) { </span><span style="color: rgba(0, 0, 255, 1)">throw</span> std::exception(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Invalid UTF-8 sequence.</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); } </span><span style="color: rgba(0, 0, 255, 1)">if</span> (widesize == <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) { </span><span style="color: rgba(0, 0, 255, 1)">throw</span> std::exception(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Error in conversion.</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); } std::vector</span>&lt;wchar_t&gt;<span style="color: rgba(0, 0, 0, 1)"> resultstring(widesize); </span><span style="color: rgba(0, 0, 255, 1)">int</span> convresult = ::MultiByteToWideChar(CP_UTF8, <span style="color: rgba(128, 0, 128, 1)">0</span>, utf8string.c_str(), -<span style="color: rgba(128, 0, 128, 1)">1</span>, &amp;resultstring[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">], widesize); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (convresult !=<span style="color: rgba(0, 0, 0, 1)"> widesize) { </span><span style="color: rgba(0, 0, 255, 1)">throw</span> std::exception(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">La falla!</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); } </span><span style="color: rgba(0, 0, 255, 1)">return</span> std::wstring(&amp;resultstring[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">]); 

}

//unicode 转为 ascii

std::string WideByte2Acsi(std::wstring& wstrcode) {

</span><span style="color: rgba(0, 0, 255, 1)">int</span> asciisize = ::WideCharToMultiByte(CP_OEMCP, <span style="color: rgba(128, 0, 128, 1)">0</span>, wstrcode.c_str(), -<span style="color: rgba(128, 0, 128, 1)">1</span>, NULL, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">, NULL, NULL); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (asciisize ==<span style="color: rgba(0, 0, 0, 1)"> ERROR_NO_UNICODE_TRANSLATION) { </span><span style="color: rgba(0, 0, 255, 1)">throw</span> std::exception(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Invalid UTF-8 sequence.</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); } </span><span style="color: rgba(0, 0, 255, 1)">if</span> (asciisize == <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) { </span><span style="color: rgba(0, 0, 255, 1)">throw</span> std::exception(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Error in conversion.</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); } std::vector</span>&lt;<span style="color: rgba(0, 0, 255, 1)">char</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> resultstring(asciisize); </span><span style="color: rgba(0, 0, 255, 1)">int</span> convresult =::WideCharToMultiByte(CP_OEMCP, <span style="color: rgba(128, 0, 128, 1)">0</span>, wstrcode.c_str(), -<span style="color: rgba(128, 0, 128, 1)">1</span>, &amp;resultstring[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">], asciisize, NULL, NULL); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (convresult !=<span style="color: rgba(0, 0, 0, 1)"> asciisize) { </span><span style="color: rgba(0, 0, 255, 1)">throw</span> std::exception(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">La falla!</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); } </span><span style="color: rgba(0, 0, 255, 1)">return</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span>(&amp;resultstring[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">]); 

}


讯享网

//utf-8 转 ascii

std::string UTF_82ASCII(std::string& strUtf8Code) {

讯享网std::</span><span style="color: rgba(0, 0, 255, 1)">string</span> strRet(<span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">先把 utf8 转为 unicode</span> std::wstring wstr =<span style="color: rgba(0, 0, 0, 1)"> Utf82Unicode(strUtf8Code); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">最后把 unicode 转为 ascii</span> strRet =<span style="color: rgba(0, 0, 0, 1)"> WideByte2Acsi(wstr); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> strRet; 

}

///

//ascii 转 Unicode

std::wstring Acsi2WideByte(std::string& strascii) {

</span><span style="color: rgba(0, 0, 255, 1)">int</span> widesize = MultiByteToWideChar (CP_ACP, <span style="color: rgba(128, 0, 128, 1)">0</span>, (<span style="color: rgba(0, 0, 255, 1)">char</span>*)strascii.c_str(), -<span style="color: rgba(128, 0, 128, 1)">1</span>, NULL, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (widesize ==<span style="color: rgba(0, 0, 0, 1)"> ERROR_NO_UNICODE_TRANSLATION) { </span><span style="color: rgba(0, 0, 255, 1)">throw</span> std::exception(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Invalid UTF-8 sequence.</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); } </span><span style="color: rgba(0, 0, 255, 1)">if</span> (widesize == <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) { </span><span style="color: rgba(0, 0, 255, 1)">throw</span> std::exception(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Error in conversion.</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); } std::vector</span>&lt;wchar_t&gt;<span style="color: rgba(0, 0, 0, 1)"> resultstring(widesize); </span><span style="color: rgba(0, 0, 255, 1)">int</span> convresult = MultiByteToWideChar (CP_ACP, <span style="color: rgba(128, 0, 128, 1)">0</span>, (<span style="color: rgba(0, 0, 255, 1)">char</span>*)strascii.c_str(), -<span style="color: rgba(128, 0, 128, 1)">1</span>, &amp;resultstring[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">], widesize); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (convresult !=<span style="color: rgba(0, 0, 0, 1)"> widesize) { </span><span style="color: rgba(0, 0, 255, 1)">throw</span> std::exception(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">La falla!</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); } </span><span style="color: rgba(0, 0, 255, 1)">return</span> std::wstring(&amp;resultstring[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">]); 

}

//Unicode 转 Utf8

std::string Unicode2Utf8(const std::wstring& widestring) {

讯享网</span><span style="color: rgba(0, 0, 255, 1)">int</span> utf8size = ::WideCharToMultiByte(CP_UTF8, <span style="color: rgba(128, 0, 128, 1)">0</span>, widestring.c_str(), -<span style="color: rgba(128, 0, 128, 1)">1</span>, NULL, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">, NULL, NULL); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (utf8size == <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) { </span><span style="color: rgba(0, 0, 255, 1)">throw</span> std::exception(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Error in conversion.</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); } std::vector</span>&lt;<span style="color: rgba(0, 0, 255, 1)">char</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> resultstring(utf8size); </span><span style="color: rgba(0, 0, 255, 1)">int</span> convresult = ::WideCharToMultiByte(CP_UTF8, <span style="color: rgba(128, 0, 128, 1)">0</span>, widestring.c_str(), -<span style="color: rgba(128, 0, 128, 1)">1</span>, &amp;resultstring[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">], utf8size, NULL, NULL); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (convresult !=<span style="color: rgba(0, 0, 0, 1)"> utf8size) { </span><span style="color: rgba(0, 0, 255, 1)">throw</span> std::exception(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">La falla!</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">); } </span><span style="color: rgba(0, 0, 255, 1)">return</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span>(&amp;resultstring[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">]); 

}

//ascii 转 Utf8

std::string ASCII2UTF_8(std::string& strAsciiCode) {

std::</span><span style="color: rgba(0, 0, 255, 1)">string</span> strRet(<span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">先把 ascii 转为 unicode</span> std::wstring wstr =<span style="color: rgba(0, 0, 0, 1)"> Acsi2WideByte(strAsciiCode); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">最后把 unicode 转为 utf8</span> strRet =<span style="color: rgba(0, 0, 0, 1)"> Unicode2Utf8(wstr); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> strRet; 

}


小讯
上一篇 2025-04-25 19:00
下一篇 2025-05-03 16:03

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/201518.html