我從外部DLL獲取ISO-8859-1編碼的字符串,並且必須使用它創建鏈接。將字符串從ISO轉換爲UTF-8,結尾爲空字節
顯然,在生產環境中(我無法訪問任何生產服務器),它會在utf-8解碼字符串的末尾添加「%00」。那麼我明白它是一個以空字符結尾的字符串。我該如何處理這種情況?
我的轉換功能是這一個:
Private Function DecodeString(ByRef SourceData As String, ByVal SourceEncoding As Encoding, ByVal OutputEncoding As Encoding) As String
Dim bSourceData As Byte() = SourceEncoding.GetBytes(SourceData)
Dim bOutData As Byte() = System.Text.Encoding.Convert(SourceEncoding, OutputEncoding, bSourceData)
Return OutputEncoding.GetString(bOutData)
End Function
我有什麼改變,使其工作?我想到類似.Replace("%00", "")
的東西,但即使它工作,我不認爲它會解決根本問題...
我發現這個:Fastest way to convert a possibly-null-terminated ascii byte[] to a string?但我不想這樣做「以儘可能最快的方式「,而且我不喜歡」不安全「的部分,就像銀行網站一樣(即使我不明白可以帶來什麼,我也不想承擔任何不必要的風險)。
感謝
爲什麼DLL不能發送ISO字符串?我無法訪問DLL內部;我甚至無法在自己的機器上得到一份副本進行測試,我必須在測試服務器上與測試人員進行反覆測試...... – thomasb
@ cosmo0:因爲沒有「ISO字符串」這樣的東西。這就像談論「十進制整數」或「十六進制整數」 - 它只是一個數字;同樣,一個字符串只是一系列的Unicode字符。一個字符串總是以UTF-16代碼單位表示。如果DLL給了你一個字符串,這取決於DLL執行任何源二進制數據所需的解碼。這聽起來像它可能會返回不良數據(最後一個帶有NUL字符的字符串)。首先,你需要了解.NET字符串是什麼。然後理想的修復你的開發過程...... –
是的,我明白這一點。但是,正如我所說的,我根本無法與DLL創建者進行交互。他們完全拒絕向我發送一份副本,所以我甚至無法調試它以查看它究竟發送了什麼(據我所知,它可能是一個字節[],vb.net會將其轉換爲魔術)。我沒有任何文件。所以我必須與之合作,並且必須在幾天內完成。現在,你有沒有什麼法律能夠幫助我解決當前的問題?謝謝。 – thomasb