- - 请关闭 - -
- - - 编辑 - - - - -
我发现问题出在哪里。我将针对真正的问题开始一个新问题....
----------------------
你好,
我的情况:
Linux (Ubuntu 10.04)
gcc
但它必须独立于平台
我有一个带有特殊字符的文本文件(UTF-8),例如¥ © ® Ỳ È Ð
. 我有一个std::map
我想要一个数据类型来保存这些特殊字符的键。目前我正在使用wchar_t
.
然后我必须使用可以包含这些字符的字符串。现在我正在使用std::wstring
.
我必须阅读那个 UTF-8 文件。所以,我想使用wifstream
. 对于线路处理,我使用了wstringstream
.
我认为这还不错,到目前为止我所做的......如果没有,什么更好?
出了什么问题:
当然,我必须阅读那个文件。但是阅读这些行会在第一行停止,并带有一个特殊的字符。简而言之,这就是我所做的:
map<wchar_t, Glyph*> glyphs;
//...
wifstream in(txtFile.c_str());
if (!in.is_open())
{
throw runtime_error("Cannot open font text file!!");
}
wstring line;
while (getline(in, line)) // edit
{
printf("Loading glyph\n");
if (line.length() == 0)
{
continue;
}
wchar_t keyChar = line.at(0);
/* First, put the four floats into the wstringstream */
wstringstream ss(line.substr(2));
/* Now, read them out */
Glyph *g = new Glyph();
ss >> g->x;
ss >> g->y;
ss >> g->w;
ss >> g->h;
glyphs[keyChar] = g;
printf("Glyph `%c` (%d): %f, %f, %f, %f\n", keyChar, keyChar, g->x, g->y, g->w, g->h);
}
所以,问题是:如何使用 wifstream 读取具有特殊字符的文件?
提前致谢!
文件的外观:
0.000000 0.000000 0.010909 0.200000
A 0.023636 0.000000 0.014545 0.200000
B 0.050909 0.000000 0.014545 0.200000
C 0.078182 0.000000 0.014545 0.200000
D 0.105455 0.000000 0.014545 0.200000
E 0.132727 0.000000 0.014545 0.200000
……
È 0.661818 0.400000 0.014545 0.200000
É 0.689091 0.400000 0.014545 0.200000
Ê 0.716364 0.400000 0.014545 0.200000
Ë 0.743636 0.400000 0.014545 0.200000
Ì 0.770909 0.400000 0.012727 0.200000
Í 0.796364 0.400000 0.012727 0.200000
Î 0.821818 0.400000 0.012727 0.200000
Ï 0.847273 0.400000 0.012727 0.200000
Ð 0.872727 0.400000 0.014545 0.200000
Ñ 0.900000 0.400000 0.014545 0.200000