ASCII,UTF-8,Unicode字符串相互转换
转换 字符串 相互 Unicode utf ascii
2023-09-11 14:21:07 时间
#include<string> #include<windows.h> #include<vector> using namespace std; //utf8 转 Unicode std::wstring Utf82Unicode(const std::string& utf8string) { int widesize = ::MultiByteToWideChar(CP_UTF8, 0, utf8string.c_str(), -1, NULL, 0); if (widesize == ERROR_NO_UNICODE_TRANSLATION) { throw std::exception("Invalid UTF-8 sequence."); } if (widesize == 0) { throw std::exception("Error in conversion."); } std::vector<wchar_t> resultstring(widesize); int convresult = ::MultiByteToWideChar(CP_UTF8, 0, utf8string.c_str(), -1, &resultstring[0], widesize); if (convresult != widesize) { throw std::exception("La falla!"); } return std::wstring(&resultstring[0]); } //unicode 转为 ascii std::string WideByte2Acsi(std::wstring& wstrcode) { int asciisize = ::WideCharToMultiByte(CP_OEMCP, 0, wstrcode.c_str(), -1, NULL, 0, NULL, NULL); if (asciisize == ERROR_NO_UNICODE_TRANSLATION) { throw std::exception("Invalid UTF-8 sequence."); } if (asciisize == 0) { throw std::exception("Error in conversion."); } std::vector<char> resultstring(asciisize); int convresult =::WideCharToMultiByte(CP_OEMCP, 0, wstrcode.c_str(), -1, &resultstring[0], asciisize, NULL, NULL); if (convresult != asciisize) { throw std::exception("La falla!"); } return std::string(&resultstring[0]); } //utf-8 转 ascii std::string UTF_82ASCII(std::string& strUtf8Code) { std::string strRet(""); //先把 utf8 转为 unicode std::wstring wstr = Utf82Unicode(strUtf8Code); //最后把 unicode 转为 ascii strRet = WideByte2Acsi(wstr); return strRet; } /////////////////////////////////////////////////////////////////////// //ascii 转 Unicode std::wstring Acsi2WideByte(std::string& strascii) { int widesize = MultiByteToWideChar (CP_ACP, 0, (char*)strascii.c_str(), -1, NULL, 0); if (widesize == ERROR_NO_UNICODE_TRANSLATION) { throw std::exception("Invalid UTF-8 sequence."); } if (widesize == 0) { throw std::exception("Error in conversion."); } std::vector<wchar_t> resultstring(widesize); int convresult = MultiByteToWideChar (CP_ACP, 0, (char*)strascii.c_str(), -1, &resultstring[0], widesize); if (convresult != widesize) { throw std::exception("La falla!"); } return std::wstring(&resultstring[0]); } //Unicode 转 Utf8 std::string Unicode2Utf8(const std::wstring& widestring) { int utf8size = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, NULL, 0, NULL, NULL); if (utf8size == 0) { throw std::exception("Error in conversion."); } std::vector<char> resultstring(utf8size); int convresult = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, &resultstring[0], utf8size, NULL, NULL); if (convresult != utf8size) { throw std::exception("La falla!"); } return std::string(&resultstring[0]); } //ascii 转 Utf8 std::string ASCII2UTF_8(std::string& strAsciiCode) { std::string strRet(""); //先把 ascii 转为 unicode std::wstring wstr = Acsi2WideByte(strAsciiCode); //最后把 unicode 转为 utf8 strRet = Unicode2Utf8(wstr); return strRet; }
转载于:https://blog.csdn.net/Don211/article/details/51769515
相关文章
- C# 16进制与字符串、字节数组之间的转换
- C#字符串、字节数组和内存流间的相互转换
- 一个将字符串转换为整数的函数--atoi()
- 电子书转换软件 Calibre 0.9.33 加强 PDF 输出功能
- 关于postgresql:将字符串转换为整数-Postgres
- 日期格式图片在转换整个输入字符串之前结束
- QT中Json的使用方法(类和json字符串相互转换的方法)
- C# 中对象与JSON字符串相互转换的三种方法
- android 常用时间格式转换代码
- Python 代码库之unicode 编码与字符串之间相互转换
- json字符串、json对象、数组 三者之间的转换
- Java中16进制与字符串之间的相互转换
- JS中将一个值转换为字符串的3种方法
- Java 字符串与byte之间的相互转换
- JS 时间字符串与时间戳之间的转换
- Revit API创建标高,单位转换
- 编程参考 - C语言中将字符串转换为整数
- java中json包的使用以及字符串,map,list,自定义对象之间的相互转换
- sql中将字符串转换为decimal
- [Work Summary] 利用Python进行时间格式字符串转换