まず、シンプルでわかりやすいが、これらの違いとの関係を言うために、インターネットはあまりにも複雑または単純すぎると述べました。
バイト幅:一般的にUnicodeに対応する文字が2つのバイトで表します。
マルチバイト:バイトの複数に対応するキャラクタを示すANSIです。
ANSI:ASCII文字セットからの彼のプロデュース、7ビット、英語を含む128文字の合計を表し、文字、数字、および特殊文字で始まります。その本来のスピーチを実証するために、すべての国の後ろに、GB2312、BIG5、JISやコーディングANSIの他の符号化された形式で、その結果、拡張されたため、我々は今、ASCIIとGBK混合一緒のいくつかを見ると、これが理由であると言うことができます。
ユニコード:彼は文字エンコーディングのさまざまな国を統一するためには、異なる言語が橋の真ん中がセット符号化方式に統一されたUnicode、Unicodeのすべての言語が登場して、ANSIテキストエンコードの同期間に格納されていないので、ない行うことができます作成しました文字化け状況。ユニコード:彼は別の名前を持っているので。
GBK:それは前述のANSI GB2312、これまで以上に漢字のコレクションの拡張版の同等によって生成拡張したものです。
第二に、ANSIとUTF-8の間の変換。
直接コピー上記(1)と操作VSを貼り付け
#include<stdio.h>
#include<windows.h>
#define CODE_LEN 256
void AnsiToUtf8(char* lpcszStr, char* lpwszStr)
{
WCHAR* strA;
int i = MultiByteToWideChar(CP_ACP, 0, lpcszStr, -1, NULL, 0);
strA = new WCHAR[i];
MultiByteToWideChar(CP_ACP, 0, lpcszStr, -1, strA, i);
i = WideCharToMultiByte(CP_UTF8, 0, strA, -1, NULL, 0, NULL, NULL);
char* strB = new char[i];
WideCharToMultiByte(CP_UTF8, 0, strA, -1, lpwszStr, i, NULL, NULL);
}
void Utf8ToAnsi(char* lpcszStr, char* lpwszStr)
{
DWORD dwMinSize;
WCHAR* strTmp;
dwMinSize = MultiByteToWideChar(CP_UTF8, 0, lpcszStr, -1, NULL, 0);
strTmp = new WCHAR[dwMinSize];
MultiByteToWideChar(CP_UTF8, 0, lpcszStr, -1, strTmp, dwMinSize);
int targetLen = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)strTmp, -1, (char*)lpwszStr, 0, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, (LPWSTR)strTmp, -1, (char*)lpwszStr, targetLen, NULL, NULL);
}
int main()
{
char str1_src[CODE_LEN] = "测试";
char str2_des[CODE_LEN] = { 0 };
char str3_src[CODE_LEN] = "娴嬭瘯";
char str4_des[CODE_LEN] = { 0 };
AnsiToUtf8(str1_src, str2_des);
printf("测试的ANSI转换成utf-8为:%s----->%s\n\n",str1_src, str2_des);
Utf8ToAnsi(str3_src, str4_des);
printf("测试的utf-8转换成ANSI为:%s----->%s",str3_src, str4_des);
return 0;
}
(2)ファイル名を指定して実行結果
(3)注意:操作は、この時点では、new演算子を使用することが、唯一のmallocを使用する必要があることに留意すべきであるその上にC ++スタイルのVC6.0を作成するために使用されていない場合。