vb.net- nulls字符串
题
我有一个从CSV文件中读取的字符串值。 CSV文件包含7 NULL
字节,我已经通过在十六进制编辑器中打开它来确认这一点,并确定有7个 0x0
字节在那里。这条绳子使我痛苦。
在我检查时,在vb.net中 strlen
在此字符串中,它返回一个值7,如果我做一个 String.IsNullOrWhitespace
它返回 false
.
我不明白为什么这是?我已经将字符串分成一个字节数组,每个字节是 0x0
, ,这是无效的。一种 string = Nothing
比较也失败了。
我希望能够用自己的字符串替换此字符串,但我无法动态地做到这一点。任何建议为什么该字符串返回长度为7的任何建议,即使每个字节为 0x0
?
解决方案
空字符不是空格,而您的字符串参考并非一无所有,所以我希望 String.IsNullOrWhitespace()
返回false
其他提示
不幸的是 null
字符七次不是一个空字符串,也不是一个空字符串。记住在.net中,字符串在某个级别A 指针 到一个角色数组。如果将此指针设置为NULL,则字符串为null。如果指针指向零长度数组,则字符串为空。在这种情况下,指针指向一个长度为七个无效字符(字节为zeros)。
空字符串
A->
空字符串
a->()
你的弦
A->(((0)(0)(0)(0)(0)(0)(0)(0)(0))
您可以使用
char nullChar = char.ConvertFromUtf32(0);
string nullCharString = new String(nullChar);
bool hasNullChar = A.Contains(nullCharString);
ISNULLEMPTYORWHITESPACE检查变量本身是否为空,而不是字符串包含null字符。无效的角色不是空格。因此,此检查也失败了。
我建议您在测试后使用Trim()。在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
字符代码零的字符就像其他任何人一样。如果您有一个具有七个此类字符的字符串,则长度为七个。 NUL字符不是白色空间字符,包含NUL字符的字符串与null的字符串引用(无)不同。
您可以使用 Trim
方法(或 TrimEnd
)通过指定应该修复nul字符来删除nul字符: str = str.Trim(Chr(0))
, ,但我认为您应该问自己为什么字符串中有NUL字符。
您是从文件正确读取数据吗?一个常见的错误是使用 Read
从流读取的方法,但忽略其返回值,从而最终得到一个仅部分填充流中数据的缓冲区。由于创建字节数组时,字节数组中充满了零,因此字节未设置为 Read
将数据解码为字符串时,操作将保持零并成为NUL字符。
- 一种 空值 字符串是尚未初始化或已设置为
Nothing
. - 一个 空的 字符串是包含空字符串的字符串
String.Empty
或者""
. - 空格字符是空间,标签,纽文,马车返回和 更多. 。但不是无效的角色。
- 您的字符串既不为空,也不是
Nothing
. 。它包含7个字符,每个字符是空字符 - 因此不是空格。
您可以使用 string.replace 删除零字符?这样的东西
s = s.Replace(vbNullChar, "")
我敢打赌,您遇到了一个编码问题。尝试以UTF-16的方式读取文件