如何从文本文件中读取非ascii字符

时间:2015-04-23 04:24:30

标签: c++ file-io ascii ifstream

我使用seekg和tellg找到了长度,然后将它们读入unsigned char *。调试器显示的文本不正确。

ifstream is (infile, ifstream::binary);
//find length
is.seekg (0, is.end);
int length = is.tellg();
is.seekg (0, is.beg);

char * buffer = new char [length];
is.read (buffer,length);
//delete[] buffer;  removed

//size_t cipherTextLength = length;                                removed    

//unsigned char* cipherText = new unsigned char[cipherTextLength]; removed

//is.read (reinterpret_cast<char*>(cipherText),length);            removed

编辑:

文本文件是这样的:

.l F4"w2ÍögPl Ð    l œ›”  ÿÿÿPl (goes on)

调试器显示如下内容:

ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««þîþîþîþ

编辑:现在textfile只显示. l,调试器显示.\xl

2 个答案:

答案 0 :(得分:0)

我认为你没有将\0添加到缓冲区。我确实遇到了同样的问题,并通过adding +1解决了这个问题。

char *buffer = new char [length + 1];
buffer[length] = 0; // Adding terminating character in content.
iFileStream.read(buffer, length);
std::string str(buffer);

现在str应该是正确的。希望这会有所帮助。

答案 1 :(得分:0)

因为你的代码if.read可以获得文件二进制文件。你的程序是字符串输出,除了。您可以使用缓冲区中的%c打印字符