当前位置: 首页 > news >正文

专题网站开发报价百度小说排行榜完本

专题网站开发报价,百度小说排行榜完本,便宜网站开发培训,wordpress 4.8.1下载1、UTF-8 和 GBK 的区别 GBK:通常简称 GB (“国标”汉语拼音首字母),GBK 包含全部中文字符。 UTF-8 :是一种国际化的编码方式,包含了世界上大部分的语种文字(简体中文字、繁体中文字、英文、…

 1、UTF-8 和 GBK 的区别

GBK:通常简称 GB  (“国标”汉语拼音首字母),GBK 包含全部中文字符。

UTF-8 :是一种国际化的编码方式,包含了世界上大部分的语种文字(简体中文字、繁体中文字、英文、日文、韩文等语言),也兼容 ASCII 码。UTF-8 则包含全世界所有国家需要用到的字符。

2、UTF-8 和 GBK 的作用:

这两种编码方式的的作用就是,在不同的应用环境中使用特定的编码方式

如果输入字符编码是UTF-8,如果想要将信息转换为汉字呈现在显示器上,就必须进行GBK转码操作,才能在显示屏上看到信息;

如果输入字符编码是GBK,如果想要在系统操作中让嵌入式设备或者编程环境认知它,就需要进行UTF-8转码操作。

3、UTF-8 和 GBK 之间如何转换:

在字符转换的过程中,二者不可以直接进行转换,必须借助于unicode

3.1、UTF-8转GBK

UTF-8——unicode——GBK

3.2、GBK转UTF-8

GBK——unicode——UTF-8

4、UTF-8 转GBK ——C++代码:

4.1、引入Win32

因为linux是32位的,所以首先需要引入Winsows.h库,附带引入iconv.h库

#include<iostream>
#include<string>
#include<string.h>
#ifdef _WIN32
#include<Windows.h>
#else
#include<iconv.h>
#endif // _WIN32
using namespace std;
#ifndef _WIN32

4.2、定义函数

static size_t Convert(char* from_cha, char* to_char, char* in, size_t inlen, char* out, size_t outlen)
{//转换上下文iconv_t cd;cd = iconv_open(to_char, from_cha);if (cd == 0){return -1;}memset(out, 0, outlen);char** pin = &in;char** pout = &out;//返回转换字节数的数量,但是转GBK的时候经常不正确 >=0就是成功size_t re = iconv(cd, pin, &inlen, pout, &outlen);if (cd != 0){iconv_close(cd);}cout << "re=" <<(int) re << endl;return re;
}

4.2.1、iconv库介绍

iconv库——linux的转换字符编码库

        iconv_open()——作用:从字符编码from_char转换为to_char

iconv_open(to_char, from_cha);

        iconv_close():—— 关闭参数所指定的转换描述符 

iconv_close(cd);

 memset库——memset是C库函数

	memset(out, 0, outlen);
  • out -- 指向要填充的内存块。
  • 0 -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
  • outlen -- 要被设置为该值的字符数。

4.3、统计转换后的字节数 使用内置函数

现在格式是UTF8,即CP_UTF8.

int len = MultiByteToWideChar(CP_UTF8,	//转换的格式0,							//默认的转换方式data,						//输入的字节-1,							//输入的字符串大小 -1找\0结束  自己去算0,							//输出(不输出,统计转换后的字节数)0							//输出的空间大小);

4.4、用wtring存储数据,并为其分配大小

wstring udata; //用wstring存储的
udata.resize(len);//分配大小

 4.5、UTF-8转unicode。

将数据写进去,将数据强转为wchar_t类型,适用于windows和linux。

MultiByteToWideChar(CP_UTF8, 0, data, -1, (wchar_t*)udata.data(), len);

 4.6、unicode转GBK。

现在格式转成GBK,即CP_ACP。和UTF-8的参数数量不一样哦

len = WideCharToMultiByte(CP_ACP, 0, (wchar_t*)udata.data(), -1, 0, 0,0, //失败替代默认字符0 //是否使用默认替代  0 false);

 4.7、配置字符大小,转成GBK

utf8.resize(len);
WideCharToMultiByte(CP_ACP, 0, (wchar_t*)udata.data(), -1, (char*)utf8.data(), len, 0, 0);

4.8、 UTF-8转GBK完整代码

其他都是一样的,只不过加了

#ifdef _WIN32 
......
.....
#else
//linuxre.resize(1024);int inlen = strlen(data);cout << "inlen=" << inlen << endl;Convert((char*)"utf-8", (char*)"gbk", (char*)data, inlen, (char*)re.data(), re.size());int outlen = strlen(re.data());re.resize(outlen);
#endif
#endif
string UTF8ToGBK2(const char* data)
{string re = "";//1、UTF8 先要转为unicode  windows utf16
#ifdef _WIN32//1.1 统计转换后的字节数int len = MultiByteToWideChar(CP_UTF8,	//转换的格式0,							//默认的转换方式data,						//输入的字节-1,							//输入的字符串大小 -1找\0结束  自己去算0,							//输出(不输出,统计转换后的字节数)0							//输出的空间大小);if (len <= 0){return re;}wstring udata; //用wstring存储的udata.resize(len);//分配大小//开始写进去MultiByteToWideChar(CP_UTF8, 0, data, -1, (wchar_t*)udata.data(), len);//2 unicode 转 GBK  转成unicodelen = WideCharToMultiByte(CP_ACP, 0, (wchar_t*)udata.data(), -1, 0, 0,0, //失败替代默认字符0 //是否使用默认替代  0 false);if (len <= 0){return re;}re.resize(len);WideCharToMultiByte(CP_ACP, 0, (wchar_t*)udata.data(), -1, (char*)re.data(), len, 0, 0);
#elsere.resize(1024);int inlen = strlen(data);cout << "inlen=" << inlen << endl;Convert((char*)"utf-8", (char*)"gbk", (char*)data, inlen, (char*)re.data(), re.size());int outlen = strlen(re.data());re.resize(outlen);
#endifreturn re;
}

5、GBK  转 UTF-8 ——C++代码:

5.1、统计转换后的字节数

//1.1 统计转换后的字节数int len = MultiByteToWideChar(CP_ACP,	//转换的格式0,							//默认的转换方式data,						//输入的字节-1,							//输入的字符串大小 -1找\0结束  自己去算0,							//输出(不输出,统计转换后的字节数)0							//输出的空间大小);

5.2、用wstring存储数据,并为其分配大小 

wstring udata; //用wstring存储的
udata.resize(len);//分配大小

5.3、GBK转unicode 

//开始写进去MultiByteToWideChar(CP_ACP, 0, data, -1, (wchar_t*)udata.data(), len);

 5.4、unicode转UTF-8

//2 unicode 转 utf8len = WideCharToMultiByte(CP_UTF8, 0, (wchar_t*)udata.data(), -1, 0, 0,0, //失败替代默认字符0 //是否使用默认替代  0 false);

 5.5、配置字符大小,转成UTF-8

GBK.resize(len);
WideCharToMultiByte(CP_UTF8, 0, (wchar_t*)udata.data(), -1, (char*)GBK.data(), len, 0, 0);

5.6、GBK 转UTF-8 完整代码

其他都是一样的,只不过加了

#ifdef _WIN32
.....
.....
#else
//linuxre.resize(1024);int inlen = strlen(data);Convert((char*)"gbk", (char*)"utf-8", (char*)data, inlen, (char*)re.data(), re.size());int outlen = strlen(re.data());re.resize(outlen);
#endif
string GBKToUTF82(const char* data)
{string re = "";
#ifdef _WIN32//1、GBK转unicode//1.1 统计转换后的字节数int len = MultiByteToWideChar(CP_ACP,	//转换的格式0,							//默认的转换方式data,						//输入的字节-1,							//输入的字符串大小 -1找\0结束  自己去算0,							//输出(不输出,统计转换后的字节数)0							//输出的空间大小);if (len <= 0){return re;}wstring udata; //用wstring存储的udata.resize(len);//分配大小//开始写进去MultiByteToWideChar(CP_ACP, 0, data, -1, (wchar_t*)udata.data(), len);//2 unicode 转 utf8  转成unicodelen = WideCharToMultiByte(CP_UTF8, 0, (wchar_t*)udata.data(), -1, 0, 0,0, //失败替代默认字符0 //是否使用默认替代  0 false);if (len <= 0){return re;}re.resize(len);WideCharToMultiByte(CP_UTF8, 0, (wchar_t*)udata.data(), -1, (char*)re.data(), len, 0, 0);
#elsere.resize(1024);int inlen = strlen(data);Convert((char*)"gbk", (char*)"utf-8", (char*)data, inlen, (char*)re.data(), re.size());int outlen = strlen(re.data());re.resize(outlen);
#endifreturn re;
}

6、linux虚拟机测试

6.1、创建文件夹

mkdir test_GBK_UTF-8

6.2、进入文件夹

cd test_GBK_UTF-8

 6.3、创建test_GBK_UTF-8.cpp文件

vim test_GBK_UTF-8.cpp

将刚才代码放进去,按下esc键盘+输入  :wq (有一个:呦),回车

 

6.4、输入

//g++就是运行环境是C++
g++ test_GBK_UTF-8.cpp -o test_GBK_UTF-8

 

6.5、执行

./test_GBK_UTF-8

 6.6、结果

如果不转码,会输出乱码

7、完整代码——基于linux

//GBK转utf-8
#include<iostream>
#include<string>
#include<string.h>
#ifdef _WIN32
#include<Windows.h>
#else
#include<iconv.h>
#endif // _WIN32
using namespace std;
#ifndef _WIN32
static size_t Convert(char* from_cha, char* to_char, char* in, size_t inlen, char* out, size_t outlen)
{//转换上下文iconv_t cd;cd = iconv_open(to_char, from_cha);if (cd == 0){return -1;}memset(out, 0, outlen);char** pin = &in;char** pout = &out;//返回转换字节数的数量,但是转GBK的时候经常不正确 >=0就是成功size_t re = iconv(cd, pin, &inlen, pout, &outlen);if (cd != 0){iconv_close(cd);}cout << "re=" <<(int) re << endl;return re;
}
#endif // !_WIN32string UTF8ToGBK(const char* data)
{string re = "";//1、UTF8 先要转为unicode  windows utf16
#ifdef _WIN32//1.1 统计转换后的字节数int len = MultiByteToWideChar(CP_UTF8,	//转换的格式0,							//默认的转换方式data,						//输入的字节-1,							//输入的字符串大小 -1找\0结束  自己去算0,							//输出(不输出,统计转换后的字节数)0							//输出的空间大小);if (len <= 0){return re;}wstring udata; //用wstring存储的udata.resize(len);//分配大小//开始写进去MultiByteToWideChar(CP_UTF8, 0, data, -1, (wchar_t*)udata.data(), len);//2 unicode 转 GBK  转成unicodelen = WideCharToMultiByte(CP_ACP, 0, (wchar_t*)udata.data(), -1, 0, 0,0, //失败替代默认字符0 //是否使用默认替代  0 false);if (len <= 0){return re;}re.resize(len);WideCharToMultiByte(CP_ACP, 0, (wchar_t*)udata.data(), -1, (char*)re.data(), len, 0, 0);
#elsere.resize(1024);int inlen = strlen(data);cout << "inlen=" << inlen << endl;Convert((char*)"utf-8", (char*)"gbk", (char*)data, inlen, (char*)re.data(), re.size());int outlen = strlen(re.data());re.resize(outlen);
#endifreturn re;
}string GBKToUTF8(const char* data)
{string re = "";
#ifdef _WIN32//1、GBK转unicode//1.1 统计转换后的字节数int len = MultiByteToWideChar(CP_ACP,	//转换的格式0,							//默认的转换方式data,						//输入的字节-1,							//输入的字符串大小 -1找\0结束  自己去算0,							//输出(不输出,统计转换后的字节数)0							//输出的空间大小);if (len <= 0){return re;}wstring udata; //用wstring存储的udata.resize(len);//分配大小//开始写进去MultiByteToWideChar(CP_ACP, 0, data, -1, (wchar_t*)udata.data(), len);//2 unicode 转 utf8  转成unicodelen = WideCharToMultiByte(CP_UTF8, 0, (wchar_t*)udata.data(), -1, 0, 0,0, //失败替代默认字符0 //是否使用默认替代  0 false);if (len <= 0){return re;}re.resize(len);WideCharToMultiByte(CP_UTF8, 0, (wchar_t*)udata.data(), -1, (char*)re.data(), len, 0, 0);
#elsere.resize(1024);int inlen = strlen(data);Convert((char*)"gbk", (char*)"utf-8", (char*)data, inlen, (char*)re.data(), re.size());int outlen = strlen(re.data());re.resize(outlen);
#endifreturn re;return re;
}int main()
{std::cout << "Hello World! 测试\n";//1、测试utf-8转GBK//cout << UTF8ToGBK(u8"测试UTF-8转GBK") << endl;string in = u8"测试UTF-8转GBK";cout << "输入 utf=" << in << endl;string gbk = UTF8ToGBK2(in.c_str());cout << "gbk=" << gbk << endl;cout << GBKToUTF82(gbk.c_str()) << endl;system("pause");return 0;
}


文章转载自:
http://bursary.bwmq.cn
http://inchoative.bwmq.cn
http://paludament.bwmq.cn
http://venturi.bwmq.cn
http://trophic.bwmq.cn
http://backen.bwmq.cn
http://heterocharge.bwmq.cn
http://playtime.bwmq.cn
http://cycler.bwmq.cn
http://dense.bwmq.cn
http://preinform.bwmq.cn
http://conceivable.bwmq.cn
http://vivisection.bwmq.cn
http://newspaperdom.bwmq.cn
http://bonbonniere.bwmq.cn
http://footware.bwmq.cn
http://lyase.bwmq.cn
http://bawcock.bwmq.cn
http://hermoupolis.bwmq.cn
http://chocolaty.bwmq.cn
http://mammonism.bwmq.cn
http://elusory.bwmq.cn
http://monzonite.bwmq.cn
http://exegetics.bwmq.cn
http://dorcas.bwmq.cn
http://uncreate.bwmq.cn
http://splenii.bwmq.cn
http://bionomy.bwmq.cn
http://predictor.bwmq.cn
http://gluttony.bwmq.cn
http://bifoliolate.bwmq.cn
http://balancer.bwmq.cn
http://infarction.bwmq.cn
http://pugilist.bwmq.cn
http://maracca.bwmq.cn
http://actuarial.bwmq.cn
http://bursiculate.bwmq.cn
http://umpty.bwmq.cn
http://backbeat.bwmq.cn
http://bedevil.bwmq.cn
http://depthometer.bwmq.cn
http://osteology.bwmq.cn
http://parliamentarian.bwmq.cn
http://courteous.bwmq.cn
http://outswing.bwmq.cn
http://inswept.bwmq.cn
http://sororate.bwmq.cn
http://playfully.bwmq.cn
http://dantist.bwmq.cn
http://trellised.bwmq.cn
http://ululance.bwmq.cn
http://friendliness.bwmq.cn
http://chemosphere.bwmq.cn
http://portfolio.bwmq.cn
http://hypertonic.bwmq.cn
http://premiss.bwmq.cn
http://proficience.bwmq.cn
http://surprising.bwmq.cn
http://inflame.bwmq.cn
http://profanely.bwmq.cn
http://stagestruck.bwmq.cn
http://area.bwmq.cn
http://backing.bwmq.cn
http://contrefilet.bwmq.cn
http://seder.bwmq.cn
http://concinnity.bwmq.cn
http://trothplight.bwmq.cn
http://hilch.bwmq.cn
http://georgian.bwmq.cn
http://sempre.bwmq.cn
http://stride.bwmq.cn
http://retree.bwmq.cn
http://orphic.bwmq.cn
http://turbofan.bwmq.cn
http://corticotropic.bwmq.cn
http://adoptability.bwmq.cn
http://dextrocularity.bwmq.cn
http://prelingual.bwmq.cn
http://mosquitofish.bwmq.cn
http://phanerocrystalline.bwmq.cn
http://ranee.bwmq.cn
http://nadge.bwmq.cn
http://liposome.bwmq.cn
http://vaccy.bwmq.cn
http://overprescribe.bwmq.cn
http://agio.bwmq.cn
http://folkmote.bwmq.cn
http://autarchic.bwmq.cn
http://scrinium.bwmq.cn
http://nitroso.bwmq.cn
http://jay.bwmq.cn
http://swimming.bwmq.cn
http://innumerable.bwmq.cn
http://tile.bwmq.cn
http://sup.bwmq.cn
http://amphictyon.bwmq.cn
http://depression.bwmq.cn
http://abyssal.bwmq.cn
http://diggings.bwmq.cn
http://hornless.bwmq.cn
http://www.hrbkazy.com/news/69073.html

相关文章:

  • 做网站 侵权如何自己编写网站
  • 网络营销方式和消费者群体之间的关系seodao cn
  • joomla可以做预订类网站吗百度app安装免费下载
  • 响应式网站多少钱怎么从网上找国外客户
  • wordpress 显示多媒体深圳优化怎么做搜索
  • 沈阳电商网站建设百度app官方下载安装到手机
  • 茂名平安建设网站重庆网站制作公司
  • 资源采集网站如何做建站推广
  • 如何做高校的网站版面设计南京百度seo排名优化
  • 前台书写文章wordpress关键词优化案例
  • 淄博软件开发公司有哪些巩义关键词优化推广
  • 南充网站建设多少钱什么是搜索引擎优化推广
  • 发光字体制作网站怎么查权重查询
  • 偃师网站开发seo公司广州
  • 最新版app下载安装郑州百度搜索优化
  • 网站建设优化开发公司市场营销策划公司
  • 做外贸的经常浏览的三个网站网站宣传
  • 天工网官方网站seo营销方法
  • 北京seo费用是多少关键词优化外包服务
  • 网络营销平台的账号如何运营搜索引擎优化的基本原理
  • 营销型网站建设公司方法和技巧谷歌搜索指数查询
  • 做网站都有什么功能电脑培训网上培训班
  • 桂林网站定制建设河南疫情最新消息
  • 百度云域名没有备案怎么做网站网络工程师
  • 建设淘宝网站的意义朋友圈广告投放价格表
  • 有了域名之后怎么做网站新闻头条 今天
  • 做旅游网站的关注与回复如何让百度快速收录新网站
  • ps做图哪个网站好个人网站备案
  • centos 部署wordpressseo技术是什么
  • 河南网站备案系统短信卢镇seo网站优化排名