VB.NET - string von Nullen
Ich habe einen string-Wert Lesen aus einer CSV-Datei. Die CSV-Datei enthält 7 NULL
bytes, ich habe dies bestätigt, indem Sie es in einen hex-editor, und sicher genug gibt es 7 0x0
bytes. Diese Zeichenfolge verursacht mir Schmerzen.
In vb.net wenn ich die strlen
dieser string gibt es einen Wert von 7 und wenn ich ein String.IsNullOrWhitespace
es gibt false
.
Kann ich nicht verstehen, warum das so ist? Ich habe split die Zeichenfolge in ein byte-array und jedes byte ist 0x0
null/nichts. Ein string = Nothing
Vergleich auch nicht.
Ich möchte in der Lage sein, ersetzen Sie diesen string mit einem string meiner eigenen, aber das kann ich nicht dynamisch. Irgendwelche Vorschläge, warum diese Zeichenfolge zurück, die eine Länge von 7, obwohl jedes byte ist 0x0
?
InformationsquelleAutor WizardsSleeve | 2010-06-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem Null-Zeichen ist kein Leerzeichen, und Ihr string-Referenz ist nicht Nichts, so würde ich erwarten, dass
String.IsNullOrWhitespace()
false zurückgeben,Sie müssten entweder konvertieren Sie Sie in "etwas anderes", zum Beispiel mit
yourstring = yourstring.Replace( Chr(0), " "c )
zu konvertieren, Leerzeichen oder Durchlaufen Sie die Zeichenfolge und lassen Sie sichInformationsquelleAutor Rowland Shaw
Leider die
null
Charakter sieben mal ist nicht eine leere Zeichenfolge oder einen null-string. Denken Sie daran, in .NET ein string ist auf einer gewissen Ebene eine Zeiger zu einem Zeichen-array. Ein string ist null, wenn dieser Zeiger auf null gesetzt. Ein string leer ist wenn der Zeiger verweist auf eine Länge von null array. In diesem Fall wird der Zeiger verweist auf eine Länge sieben-array mit null-Zeichen (Zeichen wie das byte mit Nullen).Null-String
Leere Zeichenfolge
Ihren String
Können Sie testen, für diese null-Charakter mit
InformationsquelleAutor C. Ross
IsNullEmptyOrWhitespace überprüft, ob die variable selbst null ist, nicht, wenn der string enthält NULL-Zeichen. Ein NULL-Zeichen ist kein Leerzeichen. So auch diese Prüfung fehlschlägt.
Schlage ich vor, Sie eine Trim(), nach dem test. In C# wird dies so Aussehen:
Versuchen, zu konvertieren auf VB (nicht überprüft)
InformationsquelleAutor GvS
Einen Charakter mit dem Charakter-code zero ist ein Charakter wie jeder andere. Wenn Sie eine Zeichenfolge mit sieben Zeichen, die Länge ist sieben. Das NUL-Zeichen ist kein Leerzeichen und eine Zeichenkette mit NUL-Zeichen ist nicht das gleiche wie ein string Referenz, die null (Nichts).
Könnten Sie die
Trim
Methode (oderTrimEnd
) zu entfernen, die NUL-Zeichen durch die Angabe, dass es sollte trim NUL-Zeichen:str = str.Trim(Chr(0))
, aber ich denke, man sollte eher Fragen, warum es ist NUL-Zeichen in der Zeichenfolge, um mit zu beginnen.Lesen Sie die Daten ordnungsgemäß aus der Datei? Ein häufiger Fehler ist die Verwendung des
Read
Methode zum Lesen aus einem stream, aber ignorieren, es ist return-Wert hat und sich somit am Ende mit einem Puffer nur teilweise gefüllt mit Daten aus dem stream. Als byte-array wird mit Nullen gefüllt, wenn Sie es schaffen, werden die bytes nicht von derRead
Betrieb bleiben würde null und werden NUL-Zeichen beim decodieren der Daten in eine Zeichenfolge.Ok, wenn Sie sicher sind, dass Sie getrost ignorieren kann das NUL-Zeichen, dann können Sie einfach schneiden Sie Sie aus dem string. Wenn der string enthält nur NUL-Zeichen, die Sie am Ende mit einer leeren Zeichenfolge danach.
InformationsquelleAutor Guffa
Nothing
.String.Empty
oder""
.Nothing
. Es enthält 7 Buchstaben, jeder ist das null-Zeichen - es ist also keine Leerzeichen.Könnten Sie String.Ersetzen zu löschen, die null-Zeichen? So etwas
InformationsquelleAutor MarkJ
Ich Wette, du hast ein encoding Problem. Versuchen Sie das Lesen der Datei als UTF-16
InformationsquelleAutor erikkallen