它是如何的所有設置:檢測字符串數據[]成功後,所有的字符串比較失敗
- 我收到
byte[]
包含CSV數據 - 我不知道編碼(應該是unicode/utf8)
- 我需要檢測編碼或回退到默認值(文本可能包含元音變音,因此編碼很重要)
- 我需要讀取標題行並比較它與定義的字符串
經過短暫的搜索我如何得到一個字符串出byte[]
我發現How to convert byte[] to string?其中指出使用類似
string result = System.Text.Encoding.UTF8.GetString(byteArray);
我(知道)使用this helper檢測編碼和事後Encoding.GetString
方法讀取字符串,像這樣:
string csvFile = TextFileEncodingDetector.DetectTextByteArrayEncoding(data).GetString(data);
但是當我現在嘗試從這個result
字符串值相比較靜態我的代碼中的字符串全部比較失敗!
// header is the first line from the string that I receive from EncodingHelper.ReadData(data)
for (int i = 0; i < headers.Count; i++) {
switch (headers[i].Trim().ToLower()) {
case "number":
// do
break;
default:
throw new Exception();
}
}
// where (headers[i].Trim().ToLower()) => "number"
雖然這似乎是兩個字符串我的問題是進行編碼的問題:
我怎樣才能檢測string
的編碼從byte[]
並將其轉換成默認的編碼,以便我能夠使用該字符串數據?
編輯
提供上面的代碼工作作爲長字符串數據從保存這樣一個文件來:
string tempFile = Path.GetTempFileName();
StreamReader reader = new StreamReader(inputStream);
string line = null;
TextWriter tw = new StreamWriter(tempFile);
fileCount++;
while ((line = reader.ReadLine()) != null)
{
if (line.Length > 1)
{
tw.WriteLine(line);
}
}
tw.Close();
事後與
讀出File.ReadAllText()
This
A.強制文件是Unicode(ANSI格式殺死所有的變音)
B.要求的書面文件進行訪問
現在我只拿到了inputStream
,並試圖什麼我上面張貼。正如我之前提到的那樣,字符串看起來完全相同。但他們不是。
注意:如果我使用ANSI編碼的文件,它使用Encoding.Default
所有工作正常。
編輯2
雖然ANSI編碼數據的工作UTF8編碼(notepadd ++只顯示UTF8不是W/O BOM)開始char [0]: 65279
那麼,是我的錯誤,因爲我猜System.Text.Encoding.UTF8.GetString(byteArray)
正在正確的方式。
多一點細節...什麼是CSV真正的編碼?嘗試用Notepad ++打開並查看格式:它是UTF8嗎?沒有BOM的UTF8?安思?你的代碼只是試圖在文件開始時查找BOM,但是許多UTF8/Unicode文件沒有BOM ......最後,頭文件[i]包含的是什麼?對於細節,你有點「輕」 – xanatos
調試器爲構成'headers'的實際字符顯示了什麼?'你希望匹配''number「'? – AakashM
@AakashM它顯示「數字」,所以光學相同。 – sra