是否有一個很好的理由,即.NET僅爲UTF-16提供字符串函數(如搜索,子字符串提取,拆分等)而不是字節數組?我發現很多情況下,使用8位字符而不是16位字符更容易,效率更高。爲什麼.net/c#中沒有字節字符串?
讓我們以MIME(.EML)格式爲例。它基本上是8位文本文件。使用ANY編碼無法正確讀取它(因爲編碼信息包含在文件中,而且不同的部分可能有不同的編碼)。
所以,你基本上更好地讀取MIME文件作爲字節,確定它的結構(理想情況下,使用8位字符串解析工具),並找到所有編碼依賴數據塊的編碼後應用encoding.GetString(數據)以獲得正常他們的UTF-16表示。
另一件事是與base64數據塊(base64只是一個例子,也有UUE和其他)。目前.NET期望你有一個base64的16位字符串,但是它不能有效地讀取兩倍大小的數據,並且爲了解碼這些數據而進行從字節到字符串的所有轉換。處理兆字節的數據時,它變得很重要。
缺少的字節字符串操作函數導致需要手動編寫它們,但實現明顯效率低於字符串函數的本地代碼實現。
我不說它需要被稱爲8位字符,讓我們保持它的字節。只需要一組反映大多數字符串操作例程的本地方法,但是需要使用字節數組。這只是我需要的還是我錯過了一些關於常見.NET架構的重要內容?
他們不存在的原因是你的問題的原因,並不能直接解釋'MIME(.EML)'文件同樣的原因:'strings'沒有*默認*編碼。期望開發人員知道數據文檔中字符串的編碼,並以這種方式正確地與其進行交互。提供一個沒有編碼的8位字符串不再是一個字符串,而是一個字節序列。 –
您是否在尋找特定的方法? 'Array' /'List'中有很多方法可以覆蓋一些操作,而LINQ則提供了更多的方法。 –
我甚至沒有說他們應該被稱爲字符串。它仍然是字節數組。忘記編碼。就像你,我們說,有string.IndexOf,有Array.IndexOf(byte [],byte [])。 – Alex