2014-10-09 157 views
0

我的Python脚本的两个简单的线条,其中LEN(FILEDATA)是3530阅读二进制文件Python来Vb.net

Python 

    imgFile = file(inputFile, "rb") 
    fileData = imgFile.read() 

,我试图将其转换为vb.net。如果我这样做,我可以得到的长度相匹配了,但我坚持试图将数据本身实际上得到一个字符串变量:

VB.NET 

    Using reader As New BinaryReader(File.Open(inputFile, FileMode.Open)) 
    Dim length As Integer = reader.BaseStream.Length 
    End Using 

我尝试使用

VB.NET 

    Dim fileData As String = File.ReadAllText(inputFile) 

但是,当我做len(fileData),它是3528,所以有些不对劲。

我只是想打开并读取二进制文件到一个字符串变量,并看到它的长度是3530,因为它是目前正确的工作在Python脚本。

我错过了什么?

+0

无论何时我的二进制数据丢失了几个字节,我总是怀疑该文件未以二进制模式打开,因此所有“\ r \ n”字符序列都会“有用地”变成“\ n”。不知道你会如何解决这个在VB中,这只是我在许多语言遇到的东西。 – Kevin 2014-10-09 16:35:51

回答

1

您错过了不是每个二进制数据都可以表示为String的事实。

如果你只是想的原始数据,它的长度就可以读取文件转换成字节数组:

Dim myBytes() As Byte = IO.File.ReadAllBytes("myFile.dat") 
    Console.WriteLine(myBytes.Length) 

如果真正需要的数据作为一个字符串,你必须思考的字符串编码:

Dim myString As String = IO.File.ReadAllText("myFile.dat", System.Text.Encoding.UTF8)   

ReadAllText()没有第二参数假定的编码(最可能)Encoding.Default 是ANSI与你的系统代码页。

+0

如果我用System.Text.Encoding.ASCII做最后一行,它会返回我期待的长度。使用UTF8,它仍然有2个字符害羞。 – 2014-10-09 16:48:40

+0

UTF8只是一个有目的的不好的例子。你真的不应该读取二进制数据到字符串。另一方面,它确实取决于,想要归档的内容。 – dummy 2014-10-09 16:52:27

+0

感谢您的反馈。我正在研究一个更大的项目,将一些Python脚本转换为Vb.Net,这样我最终可能会改变我的使用方式,但我希望保持一切完好无损,看看它现在的样子。 下一步似乎将该二进制信息并将其发布到http连接。我觉得如果长度不匹配,我就没有办法让它开始工作。 – 2014-10-09 16:56:28