2014-10-09 163 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