Re: Is it difficult to read UTF-8 .txt in VC++?
On Fri, 06 Jul 2007 19:47:41 +0200, Sin Jeong-hun <typingcat@gmail.com> =
=
wrote:
I want to read a line from a .txt file (which is saved in
Unicode(UTF-8) and show the string in a MessageBox.
With C#, it is very easy.
StreamReader sr=new StreamReader("c:\\a.txt",Encoding.UTF8);
string line=sr.ReadLine();
sr.close();
MessageBox.Show(line);
But with unmanaged Visual C++, I couldn't even find a simple example.
[...]
Do I really need to buy a library just to read simple UTF-8 text file?=
No, you don't need to buy anything.
For solving problems like this, I usually use UTF8-CPP library.
It's just a single header file (+ 3 utility headers), no binaries.
http://utfcpp.sourceforge.net/
1. Go to the website and download UTF8-CPP 2.0
2. Unpack and add utf8 directory to "Additional Include Directories"
of your project.
3. Use it as follows (and read manual for more complete reference):
// Project properties: General -> Character Set -> Unicode
#include <cassert>
#include <fstream>
#include <iostream>
#include <string>
#include <utf8.h> // UTF8-CPP
#include <windows.h> // MessageBox()
int _tmain(int argc, _TCHAR* argv[])
{
char const* path = "utf8.html"; // UTF-8 encoded
// Read UTF-8 file
std::ifstream fs8(path);
assert(fs8.is_open() && "Could not open");
std::string line;
std::getline(fs8, line);
assert(utf8::is_valid(line.begin(), line.end()) && "Invalid UTF-8 =
encoding");
// Convert UTF-8 string to UTF-16
std::wstring msg;
utf8::utf8to16(line.begin(), line.end() , std::back_inserter(msg));=
::MessageBox(NULL, msg.c_str(), _T("Test"), MB_OK);
return 0;
}
Cheers
-- =
Mateusz Loskot
http://mateusz.loskot.net