轉換編碼 --GBK---UTF16---UTF8

何時須要轉換編碼?
你的字符串按GBK編碼,但對方要求按UTF16編碼。
如:char str[]="你好";
4個字節,發送給對方,但對方只接受UTF16編碼windows

VC下的轉換方法:
不一樣的平臺都提供函數來作編碼轉換,這裏介紹在VC下的轉換方法
----------------------------------------------------------------------------------------

VC中,用wchar_t表明寬字符,至關於short型。一個wchar_t的數組來存放unicode字符 //unicode採用雙字節對字符進行編碼;統一的字符編碼標準
----------------------------------------------------------------------------------------數組


VS默認是GBK編碼 , 因此能用 char text_gbk[]="你好";ide

GBK->UTF16 //GBK轉成 utf16函數

UTF16->UTF8 //utf16 轉成 utf8字體



0xC4,0xE3,0xBA,0xC3編碼


int n = MultiByteToWideChar(CP_ACP, 0, text_gbk, //CP_ACP:當前活動代碼頁(當前是vs中文版,因此如今是GBK) 將GBK轉換成WideChar(寬字符)
//text_gbk:輸入字符串(是GBK編碼的字符串);
strlen(text_gbk), //strlen(text_gbk):輸入字符串的長度
text_utf16, 256); //text_utf16, 256:輸出到text_utf16 和 輸出的最大長度 返回值int n:是轉換成寬字符的個數spa



注意: 代碼中寫出來的字體 對應了哪幾個字節 這取決於CPP文件自己的編碼code

好比 在Centos/Fedora Linux上,能夠默認的字符集存儲是UTF-8的,因此它是6個字節
而在Windows中文版上,默認按GBK存儲,因此它是4字節的。blog

 

// CharacterSet.cpp : 定義控制檯應用程序的入口點。
//


#include<stdio.h>
#include<winsock2.h>
#include<windows.h>

//GBK->UTF-16    //GBK轉成 utf16
int test1()
{
    //char text_gbk[] = { 0xC4, 0xE3, 0xBA, 0xC3 };
    char text_gbk[] = "你好";//字符串字面常量,取決於cpp文件自己的字
    wchar_t text_utf16[256] = { 0 };


    int n = MultiByteToWideChar(CP_ACP, 0, text_gbk,    //CP_ACP:當前活動代碼頁(當前是vs中文版,因此如今是GBK) 將GBK轉換成WideChar(寬字符)
                                            //text_gbk:輸入字符串(是GBK編碼的字符串);
        strlen(text_gbk),                    //strlen(text_gbk):輸入字符串的長度
        text_utf16, 256);                    //text_utf16, 256:輸出到text_utf16 和 輸出的最大長度    返回值int n:是轉換成寬字符的個數
                                                    

    printf("%d個寬字符", n);
    

    return 0;
}
//GBK->UTF-16->UTF8    //國標庫轉成 UTF16再轉成UTF8
int test2()
{
    char text_gbk[] = "你好";
    //先把GBK轉換成UTF16
    wchar_t text_utf16[256] = { 0 };
    int n1 = MultiByteToWideChar(CP_ACP, 0,
        text_gbk, strlen(text_gbk), text_utf16, 256);
    //再把utf16轉換成utf8
    char text_utf8[256];
    int n2 = WideCharToMultiByte(CP_UTF8, 0,
        text_utf16, n1, text_utf8, 256, NULL, 0);

}


int main()
{

    test1();


    return 0;
}
相關文章
相關標籤/搜索