簡體   English   中英

如何讀取 C# 中的 Little Endian 編碼文件?

[英]How do I read Little Endian encoded files in C#?

我有一個來自 HttpWebResponse 的 stream,當我使用下面的代碼讀取並基本上在我的本地計算機上重新創建文件時。

string sx = "";
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    using (Stream resStream = response.GetResponseStream())
    {
        StreamReader reader = new StreamReader(resStream, Encoding.Default); // I have also tried using Encoding.UTF8/7/ASCII etc.
        sx = reader.ReadToEnd();
        // sourceItem.Name would have the file name along with the extension.
        using (StreamWriter sw = System.IO.File.AppendText(sourceItem.Name))
        {
            sw.Write(sx);
        }
    }
    response.Close();
}

但是當我在本地機器上打開文件時,我得到了所有奇怪的垃圾符號。

圖片:

垃圾字符和符號

我相信這是文件編碼的問題。 我在 git bash 上使用file *來檢查編碼,結果是Little Endian 小端截圖

但不幸的是,我在System.Text.Encoding中看不到Little Endian 我該如何解決我的問題?

謝謝您的幫助。

我該如何解決我的問題?

您確定您的 http 端點返回文本嗎? 我的猜測是,這將返回一些二進制文件,而不是如您所期望的文本文件。 如果你想直接將二進制響應寫入文件,你可以這樣做,如果我沒記錯的話:

using (Stream input = response.GetResponseStream())
using (Stream output = File.Open(sourceItem.Name, FileMode.Append))
{
    input.CopyTo(output);
}

我想知道你為什么要附加到文件中。 如果你想“基本上在我的本地機器上重新創建文件”,我希望將完整的響應寫成一個文件,會更好。 喜歡:

using (Stream input = response.GetResponseStream())
using (Stream output = File.OpenWrite(sourceItem.Name))
{
    input.CopyTo(output);
}

如果這不是問題所在,我會通過以下步驟與 go 聯系:

  1. 可以在瀏覽器或其他 Postman 之類的 http 客戶端發出請求嗎? 然后我會這樣做以查看響應是否符合您的預期。
  2. 但是如果第一步一切順利,我會在sx = reader.ReadToEnd();之后設置一個斷點。 並檢查sx以查看生成的字符串是否正確。 如果不是,則需要嘗試不同的編碼。 也許檢查 Postman 中的標頭或瀏覽器的調試工具,看看它們是否包含有關編碼的提示。
  3. 如果您現在知道第 1 步和第 2 步是預期的,並且您像 AppendText 一樣以 UTF-8 編碼將字符串寫入文件,但您的文件仍未正確顯示,那么我會質疑您使用的文本查看器 - 雖然這看起來對於無法正確處理 UTF-8 的文本查看器來說有點奇怪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM