任意文件读取转换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;
}


...全文
142 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cranium 2010-12-05
  • 打赏
  • 举报
回复
mbtowc 或者 wctomb 试试。
clhposs 2010-12-05
  • 打赏
  • 举报
回复
if (wcslen(szType) == 1) 发错了!
{
// 怎样转换?????????
}
用于批量转换txt文本文档的编码格式。通常我们电脑里的txt文件都是ASNI编码,放到手机,MP3等设备里面,打开看到的都是乱码。所以我们必须先把它们转换Unicode格式,才能够在手机和MP3上面打开。如果有大量的文件,一个一个打开另存为Unicode,那是很浪费时间的。通过txt文件编码批量转换器,你可以快速的完成多个txt文件编码的转换,而且该转换器可以转换的编码不只是unicode,还有utf-8等常用编码格式。该转换器采用文件读取写入方式,尽量保持了文件的正确无误;并采用了多线程技术,后台操作和界面线程分开,防止了转换过程中的界面假死问题转换器的使用方法很简单,只需把你要转换的txt文件放到任意一个文件夹里面,然后运行txt文件编码批量转换器,选择你要转换的编码,然后点击选择文件夹按钮,在弹出窗口中选择你放txt文件的那个文件夹,然后确定。最后点击开始转换按钮即可。转换成功的文本文件会自动存放到同一个文件里面,名字为原来的文本文件名字加上编码格式。 更新历史: 2009-09-27 《txt文件编码批量转换器V1.1版》第一次发布。 2010-08-31 《txt文件编码批量转换器V2.1版》发布,解决了V1.1版本中无法处理特殊字符的问题,修正了文件夹中无txt文件也提示转换成功的错误,对转换方法进行一些优化。 2010-09-11 《txt文件编码批量转换器V2.11版》发布,只是做了界面布局的小调整,去掉广告的轮播,降低系统内存占用,还有解决了安装过程出现360等杀毒软件误报的情况,修复了卸载无法完全删除所以安装文件的bug。 使用注意事项: 1,重要文件请不要用此软件转换,此软件纯属个人开发的免费小工具,不用于商业用途,所以本人不对此工具造成的文件损坏负责。 2,使用过程中,如碰到任何问题,请到http://www.piikee.net留言告诉我出了什么问题,我会在下一个版本中修改过来。

65,187

社区成员

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

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