가 ---- ----이 가 C++ : 파일, 인코딩 및 데이터 유형
문제는 내가 찾은 편집 ---------
입니다 ------
곳 닫아 주시기 바랍니다 . 나는 ----------------------.... 실제 문제에 대한 새로운 질문을 시작하겠습니다
안녕,
내 상황 :
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
@Martijn :'std :: string'을 사용하여 처리하고 UTF-8 string-char를 가져와야합니다. 'wchar_t'는 편리하지도 않고 플랫폼을 넘어서는 것도 아닙니다. 공간을 구분 기호로 사용하고'std :: string'에 UTF-8 문자 (1-4 바이트 너비)를 저장하거나 정말로 'char *'를 원한다면 저장할 수 있습니다. 'std :: wifstream'은'wchar_t's (리눅스에서는 UTF-32로, Windows에서는 UTF-16으로 변환됩니다)를 읽기위한 것이지 UTF-8이 아닙니다. – rubenvb