精华内容
下载资源
问答
  • UTF8与GB2312

    2013-09-30 15:18:36
    utf-8转换到GB3212 char* U2G(const char* utf8)... int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); wchar_t* wstr = new wchar_t[len+1]; memset(wstr, 0, len+1); MultiByteToWideChar(CP_UTF

    utf-8转换到GB3212

    char* U2G(const char* utf8)
    {
     int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
     wchar_t* wstr = new wchar_t[len+1];
     memset(wstr, 0, len+1);
     MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
     len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
     char* str = new char[len+1];
     memset(str, 0, len+1);
     WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
     if(wstr) delete[] wstr;
     return str;
    }

    GB2312到UTF-8的转换

    char* G2U(const char* gb2312)
    {
     int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
     wchar_t* wstr = new wchar_t[len+1];
     memset(wstr, 0, len+1);
     MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
     len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
     char* str = new char[len+1];
     memset(str, 0, len+1);
     WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
     if(wstr) delete[] wstr;
     return str;
    }


    展开全文
  • utf8 与gb2312

    2009-08-28 11:34:00
    GB2312是GBK的子集,GBK是GB18030的子集 GBK是包括中日韩字符的大字符集合 如果是中文的网站 推荐GB2312 GBK有时还是有点问题 为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便 UTF-8可以看作是大...
    GB2312是GBK的子集,GBK是GB18030的子集
    GBK是包括中日韩字符的大字符集合
    如果是中文的网站 推荐GB2312 GBK有时还是有点问题
    为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便
    UTF-8可以看作是大字符集,它包含了大部分文字的编码。
    使用UTF-8的一个好处是其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字而不会出现乱码。

    词条:UTF8
    UTF8并不算是一种电脑编码,而是一种储存和传送的格式,如前所述,每个Unicode/UCS字符都以 2或4个bytes来储存,看看以下的比较:

      以"I am Chinese"为例
       用ANSI储存:12 Bytes
       用Unicode/UCS2储存:24 Bytes + 2 Bytes(header)
       用UCS4储存:48 Bytes + 4 Bytes(header)

      以"我是中国人"为例
       用ANSI储存:10 Bytes
       用Unicode/UCS2储存:10 Bytes + 2 Bytes(header)
       用UCS4储存:20 Bytes + 4 Bytes(header)

      由此可见直接以Unicode/UCS的原始形式来储存是一种极大的浪费,而且也不利于互联网的传输(中文稍为合算一点^_^)。

       有见及此,Unicode/UCS的压缩形式--UTF8出现了,套用官方网站的首句话『UTF- 8 stands for Unicode Transformation Format-8. It is an octet (8-bit) lossless encoding of Unicode characters.』,由于UTF也适用于编码UCS,故亦可称为『UCS transformation formats (UTF)』

      UTF8是以8bits即1Bytes为编码的最基本单位,当然也可以有基于16bits和32bits的形式,分别称为UTF16和UTF32,但目前用得不多,而UTF8则被广泛应用在文件储存和网络传输中。


    编码原理

    先看这个模板:

    UCS-4 range (hex.) UTF-8 octet sequence (binary)
    0000 0000-0000 007F 0xxxxxxx
    0000 0080-0000 07FF 110xxxxx 10xxxxxx
    0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx

    0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx

    编码步骤:
    1) 首先确定需要多少个8bits(octets)
    2) 按照上述模板填充每个octets的高位bits
    3) 把字符的bits填充至x中,字符顺序:低位→高位,UTF8顺序:最后一个octet的最末位x→第一个octet最高位x
    4) 解码的原理一样。

    实例:(留意每个bit的颜色,粗体字为模板内容)

    UCS-4 UTF-8
    HEX BIN Bytes BIN HEX Bytes
    0000 000A 00001010 4 00001010 0A 1
    0000 0099 10011001 4 11000010 10011001 C2 99 2
    0000 8D99 10001101 10011001 4 11101000 10110110 10011001 E8 B6 99 3

      不知大家看懂了没有,其实不懂也无所谓,反正又不用自己算,程式可以完全代劳。

      以UTF8格式储存的文件档首标识为EF BB BF。


    效率

      从上述编码原理中得出的结论是:
       1.每个英文字母、数字所占的空间为1 Byte;
       2.泛欧语系、斯拉夫语字母占2 Bytes;
       3.汉字占3 Bytes。

      由此可见UTF8对英文来说是个非常诱人的方案,但对中文来说则不太合算,无论用ANSI还是 Unicode/UCS2来编码都只用2 Bytes,但用UTF8则需要3 Bytes。

      以下是一些统计资料,显示用UTF8来储存文件每个字符所需的平均字节:
       1.拉丁语系平均用1.1 Bytes;
       2.希腊文、俄文、阿拉伯文和希伯莱文平均用1.7 Bytes;
       3.其他大部份文字如中文、日文、韩文、Hindi(北印度语)用约3 Bytes;
       4.用超过4 Bytes的都是些非常少用的文字符号。

    词条:GB2312
    字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。

    GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

    GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平 台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。

    从ASCII、GB2312、GBK 到 GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地 处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。

    有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。

    这里还有一些细节:

    GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。

    在DBCS中,GB内码的存储格式始终是big endian,即高位在前。

    GB2312 的两个字节的最高位都是1。但符合这个条件的码位只有128*128=16384个。所以GBK和GB18030的低字节最高位都可能不是1。不过这不影 响DBCS字符流的解析:在读取DBCS字符流时,只要遇到高位为1的字节,就可以将下两个字节作为一个双字节编码,而不用管低字节的高位是什么。 

    转自:http://blog.csdn.net/ddcatlee/archive/2007/12/19/1953481.aspx
    0
    0
    0
    (请您对文章做出评价)

    转载于:https://www.cnblogs.com/ting_gt/archive/2009/08/28/1555660.html

    展开全文
  • //utf8与gb2312的相互转换 QString utf8Togb2312(QString data) { QTextCodec* utf8Codec = QTextCodec::codecForName("utf-8"); QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312"); QString str...

    编码方式之间的转换是先将源编码转到无编码,然后再转到目标编码

    // utf8与gb2312的相互转换

    QString utf8Togb2312(QString data)
    {
        QTextCodec* utf8Codec = QTextCodec::codecForName("utf-8");
    	QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");
    
    	QString strUnicode = utf8Codec->toUnicode(data.toLocal8Bit());    //无编码
    	QByteArray ByteGb2312 = gb2312Codec->fromUnicode(strUnicode);     //无编码转换
    
        char* pTmp= new char[ByteGb2312.length() + 1];
    	memset(pTmp, 0, ByteGb2312.length() + 1);
    	strncpy(pTmp, ByteGb2312.data(), ByteGb2312.length());
        printf("%s\n", pTmp);
    
        delete pTmp;
    
        return QString::fromLocal8Bit(ByteGb2312);
    }
    
    QString gb2312Toutf8(QString data)
    {
        QTextCodec* utf8Codec = QTextCodec::codecForName("utf-8");
    	QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");
    
    	QString strUnicode = gb2312Codec ->toUnicode(data.toLocal8Bit());    //无编码
    	QByteArray ByteUTF8 = utf8Codec ->fromUnicode(strUnicode);     //无编码转换
    
        return QString::fromLocal8Bit(ByteUTF8);
    }

     

    展开全文
  • utf8与gb2312有什么区别

    2019-09-28 03:34:16
    GB2312是GBK的子集,GBK是GB18030的子集GBK是包括中日韩字符的大字符集合如果是中文的网站 推荐GB2312 GBK有时还是有点问题为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便UTF-8可以看作是大字符...

    GB2312是GBK的子集,GBK是GB18030的子集
    GBK是包括中日韩字符的大字符集合
    如果是中文的网站 推荐GB2312  GBK有时还是有点问题
    为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便
    UTF-8可以看作是大字符集,它包含了大部分文字的编码。
    使用UTF-8的一个好处是其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字而不会出现乱码

     

    补充:

    mysql中utf8编码的utf8_bin,utf8_general_cs,utf8_bin的区别

    utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。

    utf8_general_cs
    区分大小写,如果用户名和邮箱用这个 就会照成不良后果

    utf8_bin: compare strings by the binary value
    of each character in the string 将字符串每个字符串用二进制数据编译存储。
    区分大小写,而且可以存二进制的内容

    举例说明:

    如果你的Sql查询语句: where
    first_name="Bob"
    下面哪些字段内容会返回匹配:
    'Bob' : utf8_bin, utf8_general_ci and
    utf8_general_cs
    'B?b' : utf8_general_ci and utf8_general_cs 将?转为o
    'B?B' :
    utf8_general_ci 不区分大小写

    转载于:https://www.cnblogs.com/EVERYDAY2012/archive/2012/09/28/2707395.html

    展开全文
  • MFC中UTF8与GB2312互转

    2018-10-08 20:46:28
    UTF8GB2312 CString CMyBrowserDlg::ConvertUTF8toGB2312(CString str) {  int len = str.GetLength();  int n = MultiByteToWideChar(CP_UTF8, 0, str, len, NULL, 0);  WCHAR *pChar = new WCHAR[n...
  • UTF8与GB2312的互转

    2014-06-12 11:24:18
    从网上找到的两个函数,实现UTF8GB2312的互转,记录一下。
  • 在PHP中,使substr函数截取字符串末位会出现乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位不准确,造成断开的字符会把其后的..拉过来一起做一个字,所以出现了乱码。
  • Linux utf8与gb2312转换函数

    千次阅读 2014-05-25 22:21:51
    Linux下GB2312与UTF8相互转换直接有接口调用的,调用的接口iconv_open #include iconv_t iconv_open (const char* tocode, const char* fromcode); 下面看下测试程序: #include #include...
  • #includeiostream> #includeiconv.h&...int utf8togb2312(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen) { iconv_t cd; if( (cd = iconv_open("gb2312...
  • 我是linux菜鸟,想问下在linux下将UTF8GB2312编码后,是直接显示中文,还是GB2312码?
  • vc++ UTF8与gb2312互相转码

    千次阅读 2011-08-25 14:12:50
    /* 编码 Convert(str,936,CP_UTF8); 解码 Convert(str,CP_UTF8,936); */ CString Convert(CString str, int sourceCodepage, int targetCodepage)
  • UTF-8编码:[1,1,1,0,A5,A6,A7,A8],[1,0,B3,B4,B5,B6,B7,B8],[1,0,C3,C4,C5,...对应的UNICODE编码:[A5,A6,A7,A8,B3,B4,B5,B6],[B7,B8,C3,C4,C5,C6,C7,C8]CString LogInDlg::GB2312ToUTF8(char *str){CString result;...
  • 网页编码utf8与gb2312的区别

    千次阅读 2007-12-19 13:16:00
    GB2312是GBK的子集,GBK是GB18030的子集 GBK是包括中日韩字符的大字符集合 如果是中文的网站 推荐GB2312 GBK有时还是有点问题 为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便 UTF-8可以看作是大...
  • // UTF8GB std::string UTF8ToGB(const char* str) {  std::string result;  WCHAR *strSrc;  TCHAR *szRes;  //获得临时变量的大小  int i = ...
  • 在PHP中,使substr函数截取字符串末位会出现乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位不准确,造成断开的字符会把其后的..拉过来一起做一个字,所以出现了乱码。substr --- ...
  • 1、'UTF转GB---将UTF8编码文字转换为GB编码文字 function UTF2GB(UTFStr) for Dig=1 to len(UTFStr) '如果UTF8编码文字以%开头则进行转换 if mid(UTFStr,Dig,1)="%" then 'UTF8编码文字大于8则...
  • UTF8-GB2312转换

    2010-06-24 12:28:17
    实现UTF8编码GBK编码的相互转换 1. UTF8编码转为为GB2312编码 2. GB2312编码转换为UTF8编码
  • UTF_8与GB2312编码转换

    2013-04-16 11:44:34
    UTF_8与GB2312编码转换 linux上面支持的是utf_8不支持GB2312编码,通过这个函数可以转换!
  • C++ UTF-8与GB2312的转换

    2019-11-12 10:28:11
    最近在编写QT程序时发现字符串传递到函数中中文乱码,需要将utf-8gb2312进行相互转换。 //UTF-8GB2312的转换 static char* G2U(const char* gb2312) { int len = MultiByteToWideChar(CP_ACP, 0, gb2312, ...
  • 描述了UTF-8与GB2312之间的互换方法
  • 一、编码历史区别 一直对字符的各种编码方式懵懵懂懂,什么ANSI UNICODE UTF-8 GB2312 GBK DBCS UCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们。Let's go!  很久很久以前,有一群人,...
  • utf-8 与gb2312

    2018-01-22 16:48:04
    1、UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个...如,如果是UTF8编码,则在外国人的英文IE上
  • 1、首先引入命名空间:using System.Text;...2、 GB2312转化为UTF-8: string LanChange(string str) { Encoding utf8; Encoding gb2312; utf8 = Encoding.GetEncoding("UTF-8"); gb2312 = Encod...
  • 该工具是使用Qt5.9开发的。支持UTF-8与GB2312文件编码的相互批量转换。
  • utf-8gb2312,gb2312utf-8

    千次阅读 2017-05-17 12:02:28
    这两种代码格式之间的转换网上有很多的文章,都写的很详细, 但是从网上找相关的工具,发现不是很好用,举个...对于utf-8转gb2312,因为utf8的字符集要大于gb2312,所以要去除一些特殊字符才能成功转换为gb2312,把要去

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,962
精华内容 784
关键字:

utf8与gb2312