获取将字符串写入文件时占用的大小(以字节为单位)

本文关键字:字节 为单位 字符串 文件 获取 | 更新日期: 2023-09-27 18:19:11

我一直在阅读解释如何获得字符串大小,内存大小或文件大小的答案:

  • 如何知道字符串的大小在字节?

  • 查找c#中对象实例的大小

  • 如何知道字符串的字节大小?- MSDN social

我的目的是确定一个字符串在指定编码下写入文件时所占用的字节数。

然而,当我检查Encoding.UTF8, Encoding.Unicode (UTF-16)或Encoding.UTF32的字符串大小时,我的函数没有返回预期的结果。

这就是我正在做的:

''' ----------------------------------------------------------------------
''' <summary>
''' Gets the size, in bytes, of how much a string will occupy when written to a file.
''' </summary>
''' ----------------------------------------------------------------------
<DebuggerStepThrough>
<Extension>
Public Function SizeInFile(ByVal sender As String,
                           Optional ByVal encoding As Encoding = Nothing) As Integer
    If (encoding Is Nothing) Then
        encoding = System.Text.Encoding.Default
    End If
    Return encoding.GetByteCount(sender)
End Function

这就是我测试它的方式,在下面的代码中,函数说字符串大小是2个字节,但当写入文件时,文件大小是4个字节:

Dim str As String = "Ñ"
Console.WriteLine(String.Format("Size of String : {0}", str.SizeInFile(Encoding.Unicode)))
File.WriteAllText(".'Test.txt", str, Encoding.Unicode)
Console.WriteLine(String.Format("Size of txtfile: {0}", New FileInfo(".'Test.txt").Length))

我缺少什么来执行字符串大小的有效计算?

在c#或VB.NET中

获取将字符串写入文件时占用的大小(以字节为单位)

文件可以以字节顺序标记(称为BOM)开头,该标记可以帮助读者检测所使用的编码。

UTF8的BOM是3字节EF,BB,BF

对于UTF16 (encoding . unicode) 2字节FEFF(根据编码方式编码为大端或小端)

For UTF32 4 bytes 0000FEFF