我正在從文本檔案(制表符分隔,從 excel 匯出)中讀取匈牙利語和塞爾維亞語單詞,然后將它們寫在控制臺上。當我在螢屏上書寫時,它無法顯示英語 ABC 之外的字符。
例如,而不是k?rteI get k??rte,而不是kru?kaI get kru??ka。
我正在使用streamreader(以及后來的streamwriter),并且我已經iso-8859-2為它們以及輸出設定了編碼。這種編碼包括我需要的兩組字符。
Console.OutputEncoding = Encoding.GetEncoding("iso-8859-2");
using(StreamReader sr = new StreamReader(fIN, Encoding.GetEncoding("iso-8859-2"))) {
using(StreamWriter sw = new StreamWriter(fDB, Encoding.GetEncoding("iso-8859-2"))) {
我試著看看它在控制臺上寫它是否有問題,所以我只是試著在螢屏上寫所有這些字符,它顯示一切都沒有問題。
Console.WriteLine("á á é é í í ó ó ? ? ü ü ? ?");
Console.WriteLine("? ? ? ? ? ? ? ? ? ?");
//outputs properly
我試圖查看存盤這些字符是否有問題,所以我將它們放在一個字串中并嘗試顯示它,沒有問題。
string s13 = "á á é é í í ó ó ? ? ü ü ? ?";
Console.WriteLine(s13);
s13 = "? ? ? ? ? ? ? ? ? ? ";
Console.WriteLine(s13);
//outputs properly
我試圖通過除錯查看問題在運行時的位置,似乎當我從檔案中讀取資料時,它被讀取錯誤。
try {
using(FileStream fs = new FileStream("DB.txt", FileMode.OpenOrCreate)) {
using(StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("iso-8859-2"))) {
while(!sr.EndOfStream) {
string[] s = sr.ReadLine().Split('\t'); //immeadiately becomes faulty, even if not split
HuSrb word = new HuSrb(s[0], s[1]);
bool found = false;
foreach(Categories c in categories) {
if(c.Name == s[2]) {
c.Amount ;
c.Words.Add(word);
found = true;
break;
}
}
if(!found) {
Categories category = new Categories(s[2], word);
categories.Add(category);
}
}
}
}
}
catch(Exception) {
throw;
}
有趣的是,后來我從檔案A讀入一個字串并將其寫入一個字串,然后將該字串的內容寫入檔案B。檔案A和檔案B都有正確的字符,但在中間,字串沒有正確的字符。
所以基本上,
- 問題不在于存盤資料
- 問題不在于列印資料
- 問題不在于將資料寫入檔案。
我的假設是問題出在從檔案中讀取時,但是我不明白它最終在另一個檔案中是如何正確的。有什么幫助嗎?
uj5u.com熱心網友回復:
問題是您在保存輸入文本檔案時可能使用了錯誤的編碼。我嘗試使用另一種編碼讀取和寫入您的示例內容并且它有效。問題是我將輸入檔案保存為 UTF8 并使用以下命令讀取內容Encoding.UTF8:
代碼:

結果 :

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/520235.html
標籤:C#细绳文件编码特殊字符
下一篇:從R中的字串末尾選擇字符的子字串
