简体   繁体   中英

How to read non ascii characters from a text file

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 . l and debugger shows .\\xl

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM