用C++ 对中文进行UTF-8编解码
来源:互联网 发布:济南好玩的地方 知乎 编辑:程序博客网 时间:2024/05/22 09:50
#include <windows.h>#include <stdio.h>#include <iostream>#include <string>
string UTF8_URL_DECODE(string URLcode);
stringUTF8_URL_ENCODE(char*Chinese);
string UTF8_URL_DECODE(string URLcode)
{
//utf-8-> unicode-> 中文
int len = strlen(URLcode.c_str());
char* temps = new char[len + 1];
temps[len] = '\0';
int temps_pos = 0;
//去掉%号
for (int i = 0; i < len; ++i)
{
if (URLcode[i] != '%')
{
temps[temps_pos] = URLcode[i];
temps_pos++;
}
}
temps[temps_pos] = '\0';
// cout << temps << endl;
int temps_len = strlen(temps);
int UTF8len = temps_len / 2;
char* UTF8str = new char[UTF8len + 1];
UTF8str[UTF8len] = '\0';
//把字符转换成数字,得到真实的UTF8串
for (int i = 0; i < UTF8len * 2;)
{
char convert[3] = { 0 };
convert[0] = temps[i++];
convert[1] = temps[i++];
char *end;
int tempint = strtol(convert, &end, 16);
UTF8str[i / 2 - 1] = tempint;
}
//UTF8转换到UTF16
int wcslen = ::MultiByteToWideChar(CP_UTF8, NULL, UTF8str, UTF8len, NULL, 0);
wchar_t* wszString = new wchar_t[wcslen + 1];
::MultiByteToWideChar(CP_UTF8, NULL, UTF8str, UTF8len, wszString, wcslen);
wszString[wcslen] = L'\0';
//设置区域
std::wcout.imbue(std::locale("CHS"));
// wcout << wszString << endl;
//把wstring 转为 string
wstring DecodeStr = wszString;
string OutStr;
int nLen = (int)DecodeStr.length() *2;
OutStr.resize(nLen, ' ');
WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)DecodeStr.c_str(), nLen, (LPSTR)OutStr.c_str(), nLen, NULL, NULL);
delete[]temps;
delete[]UTF8str;
delete[] wszString;
return OutStr;
}
//中文 转为 utf-8
string UTF8_URL_ENCODE(char*Chinese)
{
//中文 -> unicode -> utf-8
wchar_t unicode[128] = { 0 };
MultiByteToWideChar(CP_ACP, 0, Chinese, strlen(Chinese), unicode, 128);
unsigned char sz[128] = { 0 };
WideCharToMultiByte(CP_UTF8, 0, unicode, wcslen(unicode), (LPSTR)sz, 128, 0, 0);
string EncodeStr;
char SrcStr[128] = { 0 };
for (int i = 0; i < 128; i++)
{
if (sz[i] != NULL)
{
sprintf_s(SrcStr, "%%%X", sz[i]);
EncodeStr += SrcStr;
}
}
transform(EncodeStr.begin(), EncodeStr.end(), EncodeStr.begin(), tolower);
return EncodeStr;
}
int main(int argc, char *argv[])
{
string Encode_Str;
Encode_Str = UTF8_URL_ENCODE("苏BAA345", 128);
cout << Encode_Str << endl;
string Decode_Str = UTF8_URL_DECODE(Encode_Str);
cout << Decode_Str << endl;
return 0;
}
0 0
- 用C++ 对中文进行UTF-8编解码
- 对utf-8如何进行解码
- lr_convert_string_encoding: 对中文进行UTF-8转码
- 对UTF-8和GB2312格式 URL进行解码
- 对UTF-8和GB2312格式 URL进行解码
- opencv如何对视频进行编解码
- UTF-8编解码之说明
- UTF-8编解码之实现
- unicode utf-8 字符编解码
- 使用JavaScript实现UTF-8编解码
- B+ Tree & Unicode & UTF-8 & 判断是否为UTF-8 & 几种常见中文的编解码表
- 对UTF-8字符串解码
- JVM 字符编解码 UTF-8 UTF-16
- 中文编解码问题
- VB URL的编解码源码 GB2312 UTF-8编解码
- 字符编解码的故事(ASCII,ANSI,Unicode,Utf-8)
- Base64编解码(C)
- 使用encodeURl()进行编解码
- openejb Example1
- SELinux 的启动、关闭与查看
- Android系统中的进程管理
- cpu 核心 线程 超频 超线程技术 等基本概念
- PHP自定义函数格式化json数据示例
- 用C++ 对中文进行UTF-8编解码
- 《Java并发编程》之线程中断与终止线程运行
- jQuery中的ajax方法参数详解
- 日志中出现大量Minact-Scn Master-Status: Grec-Scn Messages 信息
- MPAndroidChart是一款基于Android的开源图表库
- [00017]从字典中提取子集
- 从相册中选择多张图片
- android之ScrollView里嵌套ListView
- 关于scrollView中嵌套listview时,界面一开始不是滑到最顶部的问题