Laden...

Zeile mit "\x00" einlesen

Erstellt von degri2006 vor 3 Jahren Letzter Beitrag vor 3 Jahren 285 Views
D
degri2006 Themenstarter:in
21 Beiträge seit 2009
vor 3 Jahren
Zeile mit "\x00" einlesen

Hallo,
ich habe einen Problem. Ich habe einen String und enthält u.a. folgende Zeile:


$a= "blablablablablablablabla\x00" wide nocase

Ich will die Substrings links und rechts vom Gleichheitszeichen in seperate Variablen speichern.
line.Split("=")[0] -> $a
line.Split("=")[1] -> "blablablablablablablabla\x00" wide nocase

Links vom Gleichheitszeichen wird korrekt gespeichert, der String rechts vom Gleichheitszeichen macht Probleme:
"blablablablablablablabla
Es wird beim Nullterminator abgebrochen. Kann mir jemand einen Tip geben wie ich den String rechts vom Gleichheitszeichen komplett abspeichern kann?

6.911 Beiträge seit 2009
vor 3 Jahren

Hallo degri2006,

ich kann das geschilderte Verhalten nicht reproduzieren.
Welche .NET Version verwendet du und welche Culture (normal jene vom Betriebssystem, also de-DE od. de-AT (wie bei mir)).


using System;

string line = "$a=\"blablablablablablablabla\x00\" wide nocase";

string a = line.Split("=")[0];
string b = line.Split("=")[1];

Console.WriteLine(line);
Console.WriteLine(a);
Console.WriteLine(b);

liefert


$a="blablablablablablablabla " wide nocase
$a
"blablablablablablablabla " wide nocase

Die \0 werden / können so nicht dargestellt werden.

BTW: statt "=" (ist ein String) ist es besser die char-Überladung zu verwenden, also


string a = line.Split('=')[0];
string b = line.Split('=')[1];

Hier ist (unter .NET 5.0 und de-AT) das Ergebnis gleich, aber wegen Globalization APIs use ICU libraries on Windows könnte es einen Unterschied machen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

D
degri2006 Themenstarter:in
21 Beiträge seit 2009
vor 3 Jahren

Hi,
danke für die Info. Ich arbeite auf einer Linux Maschine. dotnet --list-sdks sat 5.0.102. Ich habe auf derselben Maschine eine ziemlich genaue, aber etwas einfacherer Konstellation hergestellt und in dem Fall klappt es auch. Ich muss es mir morgen genauer angucken, warum es mit dem ursprünglichen Fall nicht klappt, aber bei dem anderen, das äquivalent ist, klappt.