Relación relacionada con la conversión ANSI entre bytes UTF-8 de ancho, multi-byte, ANSI, UTF-8, Unicode, GBK,

En primer lugar, la simple y directo para decir estas diferencias y las relaciones, dijo que el Internet es demasiado complicado o demasiado simple.

anchura Byte: en general, representa un carácter correspondiente a Unicode es de dos bytes.

Multi-byte: indica un personaje, lo que corresponde a una pluralidad de bytes es ANSI.

ANSI: su producción a partir del conjunto de caracteres ASCII, a partir de 7 bits, representan un total de 128 caracteres, incluyendo Inglés, letras, números y caracteres especiales. Porque detrás de todos los países que demuestren su lengua nativa, fue ampliada, lo que resulta en GB2312, Big5, JIS y otra forma codificada de la codificación ANSI, ahora podemos ver algunos de los ASCII y GBK mezclados entre sí y decir esta es la razón.

Unicode: creó con el fin de unificar los diferentes países de la codificación de caracteres, diferentes idiomas no se pueden almacenar en el mismo período de ANSI codificación de texto, por lo que la mitad del puente apareció Unicode, Unicode todos los idiomas se unifican en un conjunto codificaciones, y por lo tanto no lo hacen situación confusa. Así que él tiene otro nombre: Unicode.

GBK: Es una extensión producida por el ANSI GB2312 se ha mencionado anteriormente, el equivalente de una versión mejorada de una colección de cada vez más caracteres Kanji.

En segundo lugar, la conversión entre ANSI y UTF-8.

(1) directamente por encima de la copia y pega operación 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) Resultados Run

(3) Nota: Si no se utiliza la operación para crear el estilo de C ++ VC6.0 por encima del cual hay que señalar que el uso del nuevo operador, en este momento sólo puede necesitar el uso de malloc.

Publicado 23 artículos originales · ganado elogios 4 · Vistas 9966

Supongo que te gusta

Origin blog.csdn.net/hxp1994/article/details/100905140
Recomendado
Clasificación