hur.cn - 华软网

 热门搜索

VC读取UNICODE编码格式的文件问题

  作者:未知    来源:网络    更新时间:2010/12/10

如果在某一资料夹下,有多个文本资料,每一个资料的编码格式都不一样,但只可够为以下两者之一: ASCII和UNICODE。
如何在读取的进程中自动举行措置惩罚(编码转换),进而防止出现乱码现象. 当前工程的编码格式为UNICODE
请注意看注释部份。

C++">
CString CTextFileParse::ReadTextFromFile(HANDLE handle,unsigned long file_pointer,unsigned long read_len) {
CString result_text;

unsigned char* buffer = new unsigned char[read_len]; //如果资料编码格式为UNICODE,这里运用unsigned char*读取上来后
     //是否就已经是乱码了?
SetFilePointer(handle,file_pointer,0,FILE_BEGIN);
unsigned long ret = 0;
if (ReadFile(handle,buffer,read_len,&ret,0) != FALSE) {
//buffer为读取后的文本内容,举行响应转换,将转换后的结果给result_text
} else {

printf("read file failed! last_error(%d)\r\n"),GetLastError());
}
if (buffer) {
delete[] buffer;
buffer = NULL;
}
return result_text;
}

---华软 网友回答---
C++">
try
{
CFile file;
file.Open(_T("F:\\11.txt"), CFile::modeRead);
DWORD len = static_cast<DWORD>(file.GetLength());
BYTE buf[2] = {0};
file.Read(buf, 2);
file.Close();

if(0xFF == buf[0] && 0xFE == buf[1])
{
AfxMessageBox(_T("Unicode"));
}
else
{
AfxMessageBox(_T("Multi-Byte"));
}
}
catch (CFileException* e)
{
e->ReportError();
e->Delete();
}

---华软网友回复---
C++">IsTextUnicode()

Determines if a buffer is likely to contain a form of Unicode text. 

---华软网友回复---
引用 1 楼 visualeleven 的回复:
C/C++ code

try
    {
        CFile file;
        file.Open(_T("F:\\11.txt"), CFile::modeRead);
        DWORD len = static_cast<DWORD>(file.GetLength());
        BYTE buf[2] = {0};
        fil……


学习
---华软网友回复---
引用 1 楼 visualeleven 的回复:
C/C++ code

try
    {
        CFile file;
        file.Open(_T("F:\\11.txt"), CFile::modeRead);
        DWORD len = static_cast<DWORD>(file.GetLength());
        BYTE buf[2] = {0};
        file.Read……


增补
      if((0xFF == buf[0] && 0xFE == buf[1])|| (0xFE == buf[0] && 0xFF == buf[1]))//big endian or little endian
        {
            AfxMessageBox(_T("Unicode"));
        }
        else
        {
            AfxMessageBox(_T("Multi-Byte"));
        }


---华软网友回复---
直接二进制方式读取资料头,Unicode资料有0xFFFE
---华软网友回复---
直接二进制方式读取资料头,Unicode资料有0xFFFE      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。