是否有一种简单的方法可以将多字节UTF8数据(从Google Contacts API通过https://www.google.com/m8/feeds/)转换为单字节?我知道扩展的ASCII集是非标准的,但是,例如,我的程序将在MFC CListBox中显示信息,很高兴将'E acute'显示为0xE9。我只需要它来应对一些类似的欧洲符号。我发现我可以使用MultiByteToWideChar()转换所有内容,但是如果可能的话,不希望必须更改许多函数来接受宽字符。 感谢。
答案 0 :(得分:1)
Utf8与Ascii字符具有1对1的映射,因此如果您接收ascii字符作为utf8字符,AFAIK可以直接将它们作为Ascii读取。如果您有非Ascii字符,那么您无法在Ascii中表达它们(任何字节> 0x80)
答案 1 :(得分:1)
如果您需要将char *
从UTF8
转换为ANSI
,请尝试以下功能:
// change encoding from UTF8 to ANSI
char* change_encoding_from_UTF8_to_ANSI(char* szU8)
{
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), NULL, 0);
wchar_t* wszString = new wchar_t[wcsLen + 1];
::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszString, wcsLen);
wszString[wcsLen] = '\0';
int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
char* szAnsi = new char[ansiLen + 1];
::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL);
szAnsi[ansiLen] = '\0';
delete []wszString;
return szAnsi;
}