Forum: PC-Programmierung Utf16 little endian zu std::string


von Jean P. (fubu1000)


Angehängte Dateien:

Lesenswert?

Hi,
ich hoffe mir kann jemand helfen. Habe eine Datei vorliegen, woraus ich 
Daten heraus parsen muss. Die Datei ist Utf16 little endian kodiert, wie 
man am angehangenden Bild erkennen kann.
Allerdings kriege ich es nicht hin, die Zeilen zu parsen. Beim ersten 
auftauchen einer Null, schneidet meine Funktion den String ab.
Vielleicht hat ja von euch jemand mal sowas gemacht.
Vielen Dank im voraus.

1
std::wifstream wfile;
2
wfile.open(path.c_str(), std::ios_base::binary | std::ios_base::in);
3
if(wfile.is_open())
4
{
5
  std::wstring wstr;
6
  getline(wfile, wstr);
7
  while(wfile.good())   
8
  {
9
    csvlines.pushback(WString2String(wstr);
10
    getline(wfile, wstr);
11
  }
12
  wfile.close();
13
}  
14
15
16
std::string MyClass::WString2String(std::wstring& s)
17
{
18
  int slength = (int)s.length() + 1;
19
  int len = WideCharToMultiByte(CP_ACP, 0, s.c_str(), 
20
                                slength, 0, 0, 0, 0); 
21
  std::string r(len, '\0');
22
  WideCharToMultiByte(CP_ACP, 0, s.c_str(), slength, &r[0], len, 0, 0); 
23
  return r;
24
}

von Arc N. (arc)


Lesenswert?


von Jean P. (fubu1000)


Lesenswert?

Danke für den Link Arc.
Ich habe trotzdem nicht hinbekommen, wie dort beschrieben.
Aber um den Thread nicht Lösungsfrei zu lassen.
Ich habe QT4.6.2 eingebunden und es dann so gelöst:
1
QStringList list;
2
QFile file(QString::fromStdString(path));
3
file.open(QFile::ReadWrite);
4
QTextStream stream(&file);
5
stream.setCodec("UTF-16LE");
6
QString str = stream.readLine();
7
while(!str.isEmpty())
8
{
9
  list.push_back(str);
10
  str = stream.readLine();
11
}

Gruß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.