任意文件读取转换UNICODE问题

clhposs 2010-12-05 09:47:57

void MyFile::JudgeFile(LPCWSTR lpFileName, LPWSTR lpType)
{
FILE *fp;

if ((fp = _wfopen(lpFileName, L"r")) == NULL)
{
return;
}
BYTE btHead[3];

// 读取文件前3个字节
size_t uRead = fread(btHead, 1, 3, fp);

if (uRead == 3 && btHead[0] == 0xEF && btHead[1] == 0xBB && btHead[2] == 0xBF)
{
swprintf(lpType, L"r, ccs=UTF-8");
return;
}
if (uRead >= 2 && ((btHead[0] == 0xFE && btHead[1] == 0xFF) || (btHead[0] == 0xFF && btHead[1] == 0xFE)))
{
swprintf(lpType, L"r, ccs=UNICODE");
return;
}
swprintf(lpType, L"r");
}

bool MyFile::OpenFile(LPCWSTR lpFileName)
{
FILE *fp;
wchar_t szType[32];
JudgeFile(lpFileName, szType);

if ((fp = _wfopen(lpFileName, szType)) == NULL)
{
return false;
}

wchar_t szLine[MAX_LINE];

while(fgetws(szLine, MAX_LINE, fp))
{
m_file_text += szLine;
m_file_text += L'\n';
std::wcout << szLine << std::endl;
}
if (wcslen(szType) == 2)
{
// 怎样转换?????????
}
else
{
m_lpText = m_file_text.c_str();
}
return true;
}


...全文
137 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cranium 2010-12-05
  • 打赏
  • 举报
回复
mbtowc 或者 wctomb 试试。
clhposs 2010-12-05
  • 打赏
  • 举报
回复
if (wcslen(szType) == 1) 发错了!
{
// 怎样转换?????????
}

64,266

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧