Red de conocimiento informático - Espacio del host - Cómo cambiar la codificación UTF-8 de un archivo txt a codificación ANSI en un teléfono móvil

Cómo cambiar la codificación UTF-8 de un archivo txt a codificación ANSI en un teléfono móvil

Consulte el siguiente método para cambiar la clase CFile a FILE*. La escritura de cadenas se cambia a la escritura de secuencias de archivos.

Tenga en cuenta que los caracteres chinos ocupan 3 bytes en utf8.

// Unicode a ansi

void CConvertDlg::OnBnClickedButtonUnicodeToAnsi()

{

// Unicode a ansi

wchar_t* wszString = L"abcd1234你我他";

//Preconversión, obtenga el tamaño del espacio requerido, esta vez la función utilizada es opuesta al nombre anterior

int ansiLen =::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);

//Igual que arriba, asigne espacio para dejar espacio para '\0'

char* szAnsi = new char[ansiLen 1];

//Conversión

//El strlen correspondiente a la versión Unicode es wcslen

::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL);

//Agregar '\0' al final

szAnsi[ansiLen ] = '\0';

//Versión Ansi de MessageBox API

: MessageBoxA(GetSafeHwnd(), szAnsi, szAnsi, MB_OK);

//Escribir texto a continuación

//Escribir archivo de texto, el archivo ANSI no tiene BOM

CFile cFile;

cFile. Open(_T("1. txt"), CFile::modeWrite | CFile::modeCreate);

//Comienzo del archivo

cFile.SeekToBegin();

//Escribir contenido

cFile.Write(szAnsi, ansiLen * sizeof(char));

cFile.Flush();

cFile .Close();

cFile.Close();

p>

eliminar[] szAnsi;

szAnsi =NULL;

//Método 2

//Existe otro método como el anterior

setlocale(LC_CTYPE, "chs");

char szStr[100 ];

//Tenga en cuenta que lo siguiente está en mayúscula. En ansi, significa Unicode después String

//sprintf

sprintf(szStr, "S ", wszString);

:MessageBoxA(GetSafeHwnd(), szStr, szStr, MB_OK );

}

//UTF8 a UNICODE

void CConvertDlg::OnBnClickedButtonU8ToUnicode()

{

//UTF8 a Unicode

//Dado que los caracteres chinos serán confusos cuando se copien directamente, y el compilador a veces informará un error, se utiliza la forma hexadecimal

char* szU8 = "abcd1

234\xe4\xbd\xa0\xe6\x88\x91\xe4\xbb\x96\x00";

//Preconversión, obtenga el tamaño del espacio requerido

int wcsLen =::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), NULL, 0);

//Al asignar espacio, deje un espacio para '\0', MultiByteToWideChar no dará ' \0' Espacio

wchar_t* wszString = new wchar_t[wcsLen 1];

//Conversión

::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen (szU8) , wszString, wcsLen);

//Agregar '\0' al final

wszString[wcsLen] = '\0';

//versión Unicode MessageBox API

: MessageBoxW(GetSafeHwnd(), wszString, wszString, MB_OK);

//Escribir texto es lo mismo que ansi en Unicode

}