質問

CSVファイルから文字列値が読み取られています。 CSVファイルには7が含まれています NULL バイト、私はそれを16進エディタで開くことでこれを確認しました、そして、十分に十分な7があると確信しています 0x0 そこにバイト。このひもは私に痛みを引き起こしています。

私がチェックするときにvb.netで strlen この文字列の値は7の値を返し、私がする場合 String.IsNullOrWhitespace それは戻ってきます false.

なぜそうなのか理解できませんか?文字列をバイト配列に分割し、各バイトは 0x0, 、これはnull/Nothingです。 a string = Nothing 比較も失敗します。

この文字列を自分の文字列に置き換えることができますが、動的にはできません。この文字列が各バイトがいても7の長さを返す理由 0x0?

役に立ちましたか?

解決

ヌル文字は空白ではなく、文字列の参照は何もないので、私は期待します String.IsNullOrWhitespace() falseを返す

他のヒント

残念ながら null キャラクター7回は、空の文字列やヌル文字列ではありません。 .NETで覚えておいてください文字列はあるレベルにあります ポインター キャラクター配列に。このポインターがnullに設定されている場合、文字列はnullです。ポインターがゼロの長さアレイを指している場合、文字列は空です。この場合、ポインターはnull文字の長さ7つの配列(バイトはすべてゼロです)を指します。

ヌル文字列

A->

空の文字列

a->()

あなたの文字列

a->((0)(0)(0)(0)(0)(0)(0))

このヌル文字を使用してテストできます

char nullChar = char.ConvertFromUtf32(0);
string nullCharString = new String(nullChar);
bool hasNullChar = A.Contains(nullCharString);

isnullemptyorwhitespaceは、変数自体がnullであるかどうかをチェックしますが、文字列にnull文字が含まれている場合ではありません。ヌル文字は空白ではありません。したがって、このチェックも失敗します。

テスト後、トリム()を使用することをお勧めします。 C#では、これは次のようになります。

bool MyNullCheck(string s) {
    if (s == null) return false;
    s = s.Trim(new string(char.ConvertFromUtf32(0), 1));
    return string.IsNullEmptyOrWhiteSpace(s);
}

VBに変換してみてください(チェックされていません)

Function MyNullCheck(s as String) as Boolean
  If s Is Nothing Then
     Return False
  End If
  s = s.Trim(New String(vbNullChar, 1))
  Return String.IsNullEmptyOrWhiteSpace(s)
End Function

キャラクターコードゼロを持つキャラクターは、他のキャラクターと同じようにキャラクターです。このような文字が7つある文字列がある場合、長さは7つです。 NUL文字は白い空間文字ではなく、nul文字を含む文字列は、null(何もない)の文字列参照と同じではありません。

使用できます Trim 方法(または TrimEnd)nul文字をトリミングする必要があることを指定してnul文字を削除するには: str = str.Trim(Chr(0)), 、しかし、私はむしろ、最初から文字列にnul文字がある理由を自問するべきだと思います。

ファイルからデータを適切に読んでいますか?一般的なエラーは、を使用することです Read ストリームから読み取る方法ですが、それは返品値であるため、ストリームからのデータが部分的に満たされたバッファで終了することを無視します。あなたがそれを作成するとき、バイト配列はゼロで満たされているため、バイトはによって設定されていません Read データを文字列にデコードすると、操作はゼロのままで、NUL文字になります。

  • a ヌル 文字列は、初期化されていない、またはに設定されているものです Nothing.
  • an 文字列は、空の文字列を含むものです String.Empty また "".
  • Whitespace文字は、スペース、タブ、Newline、キャリッジリターン、そして さらに多く. 。しかし、ヌル文字ではありません。
  • あなたの文字列は空でもありません Nothing. 。 7文字が含まれており、それぞれがヌル文字であるため、空白ではありません。

使用できます string.replace ゼロ文字を削除するには?このようなもの

s = s.Replace(vbNullChar, "")

エンコードの問題に遭遇したに違いない。ファイルをUTF-16として読んでみてください

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top