kΩ这样的读出来是乱码,在MFC里用字符串变量定义 str=_T("kΩ")然后写进txt里面也显示是乱码,求大神们指点一下该怎么修改啊?
7 个解决方案
#1
项目用 UNICODE 方式 编译
#2
try
{
LPCWSTR lpszText = L"10 kΩ";
CFile file(TEXT("F:\\11.txt"), CFile::modeCreate | CFile::modeWrite);
BYTE byUnicode[] = { 0xFF, 0xFE };
file.Write(byUnicode, sizeof(byUnicode));
file.Write(lpszText, wcslen(lpszText) * sizeof(WCHAR));
file.Close();
}
catch (CException* e)
{
e->ReportError();
e->Delete();
}
#3
应该是多字节字符的转化问题,可以换成用 UNICODE 方式 编译或者用MultiByteToWideChar进行转化。
#4
用的就是unicode呀
#5
那要读txt里面的字符"kΩ"要怎么写呢
#6
try
{
WCHAR szText[16] = { 0 };
CFile file(TEXT("F:\\11.txt"), CFile::modeRead);
file.Seek(2, CFile::begin); // Skip 0xFF, 0xFE
file.Read(szText, sizeof(szText));
file.Close();
AfxMessageBox(CString(szText));
}
catch (CException* e)
{
e->ReportError();
e->Delete();
}
#7
使用函数进行转换:从TXT读出后 ANSI向UNCODE转换,写入时反过来转换。
函数
引用例:
函数
// ANSI To UNCODE转换
CString AnsiToUnicode(char * szAnsi, int len=0);
// Unicod To ANSI转换
int UnicodToAnsi(CString str,char* buff);
// ANSI To UNCODE转换
CString CXXXX::AnsiToUnicode(char * szAnsi, int len)
{
CString str;
// ansi to unicode
//预转换,得到所需空间的大小
int wcsLen;
if(len>0)
wcsLen=len;
else
wcsLen= ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0);
//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
wchar_t* wszString = new wchar_t[wcsLen + 1];
//转换
::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen);
//最后加上'\0'
wszString[wcsLen] = '\0'; // UNICODE字串
str=wszString;
delete[] wszString;
return str;
}
// Unicod To ANSI转换
int CXXXX::UnicodToAnsi(CString str,char* buff)
{
int len=0;
// UNICODE编码 转换成 ANSI编码
len = ::WideCharToMultiByte(CP_ACP, NULL, str,
str.GetLength(), NULL, 0, NULL, NULL); // 取字串长度
::WideCharToMultiByte(CP_ACP, NULL, str, str.GetLength(),
buff, len, NULL, NULL);
buff[len++]=0x00; // 写字串尾部结束标志
return len; // 转换长度
}
引用例:
CStringProc sp;
CString IP=sp.AnsiToUnicode(pip);
char cf[640];
CStringProc sp;
// 语音文件检查
sp.UnicodToAnsi(fName,cf);
#1
项目用 UNICODE 方式 编译
#2
try
{
LPCWSTR lpszText = L"10 kΩ";
CFile file(TEXT("F:\\11.txt"), CFile::modeCreate | CFile::modeWrite);
BYTE byUnicode[] = { 0xFF, 0xFE };
file.Write(byUnicode, sizeof(byUnicode));
file.Write(lpszText, wcslen(lpszText) * sizeof(WCHAR));
file.Close();
}
catch (CException* e)
{
e->ReportError();
e->Delete();
}
#3
应该是多字节字符的转化问题,可以换成用 UNICODE 方式 编译或者用MultiByteToWideChar进行转化。
#4
用的就是unicode呀
#5
那要读txt里面的字符"kΩ"要怎么写呢
#6
try
{
WCHAR szText[16] = { 0 };
CFile file(TEXT("F:\\11.txt"), CFile::modeRead);
file.Seek(2, CFile::begin); // Skip 0xFF, 0xFE
file.Read(szText, sizeof(szText));
file.Close();
AfxMessageBox(CString(szText));
}
catch (CException* e)
{
e->ReportError();
e->Delete();
}
#7
使用函数进行转换:从TXT读出后 ANSI向UNCODE转换,写入时反过来转换。
函数
引用例:
函数
// ANSI To UNCODE转换
CString AnsiToUnicode(char * szAnsi, int len=0);
// Unicod To ANSI转换
int UnicodToAnsi(CString str,char* buff);
// ANSI To UNCODE转换
CString CXXXX::AnsiToUnicode(char * szAnsi, int len)
{
CString str;
// ansi to unicode
//预转换,得到所需空间的大小
int wcsLen;
if(len>0)
wcsLen=len;
else
wcsLen= ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0);
//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
wchar_t* wszString = new wchar_t[wcsLen + 1];
//转换
::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen);
//最后加上'\0'
wszString[wcsLen] = '\0'; // UNICODE字串
str=wszString;
delete[] wszString;
return str;
}
// Unicod To ANSI转换
int CXXXX::UnicodToAnsi(CString str,char* buff)
{
int len=0;
// UNICODE编码 转换成 ANSI编码
len = ::WideCharToMultiByte(CP_ACP, NULL, str,
str.GetLength(), NULL, 0, NULL, NULL); // 取字串长度
::WideCharToMultiByte(CP_ACP, NULL, str, str.GetLength(),
buff, len, NULL, NULL);
buff[len++]=0x00; // 写字串尾部结束标志
return len; // 转换长度
}
引用例:
CStringProc sp;
CString IP=sp.AnsiToUnicode(pip);
char cf[640];
CStringProc sp;
// 语音文件检查
sp.UnicodToAnsi(fName,cf);