How to read non ascii characters from a text file

2019-09-06 21:10发布

I found the length using seekg and tellg, then read them into an unsigned char*. The debugger is showing incorrect text though.

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

edit:

text file is something like this:

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

debugger shows something like:

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

edit: now textfile only shows . l and debugger shows .\xl

2条回答
我想做一个坏孩纸
2楼-- · 2019-09-06 21:22

As your code if.read can get file binary. your program is string output except. you can print character on by on use %c from buffer

查看更多
Summer. ? 凉城
3楼-- · 2019-09-06 21:31

I think you are not adding \0 to the buffer. I did faced the same issue and solved it by adding +1 to the length.

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

Now the str should be correct. Hope this helps.

查看更多
登录 后发表回答