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 p>
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
}