我使用CStdioFile读取文本文件,输出是字符串 但是我想在对话框中选择文件时检查原始编码文件 如何查看原始编码?
//这是我的代码
if(dlg.DoModal() == IDOK)
{
path = dlg.GetPathName(); //get file path
CStdioFile pStdioFile1(path, CFile::modeRead);
char buff[BUFSIZ];
while(!feof(pStdioFile1.m_pStream))
{
pStdioFile1.ReadString(Buff); //Buff is read text to string
msg += Buff;
if(!feof(pStdioFile1.m_pStream))
{
msg += "\n";
}
}
答案 0 :(得分:1)
你做不到。在某些情况下,数据将包含所使用的编码的指示,但您无法真正依赖它。 Windows确实提供IstextUnicode
来猜测某些文本是否是unicode(在这种情况下意味着UTF-16),但是1)它只对Unicode有利,2)结果只是猜测
顺便说一下,我对你将整个文件读成字符串的代码感到兴奋。假设文件预计相当小,我通常使用类似的东西:
std::ifstream in(dlg.GetPathName());
std::stringstream buffer;
buffer << in.rdbuf();
// now the content of the file is availble as `buffer.str()`.
答案 1 :(得分:1)
检查文件的BOM(字节顺序标记)(参见http://en.wikipedia.org/wiki/Byte_order_mark)。
如果文件不包含BOM,则假定它是8位ANSI文件。
否则,BOM表示文件的格式。检查链接,它包含一个很好的表格,其中包含不同的BOM及其含义。