Utf16 little endian zu std::string

#2645694
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
}
Angehängte Dateien:
#2646434
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ß

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren