2011-07-11 39 views
11

Tôi gặp sự cố trong đó tôi không thể đọc tệp chứa ký tự nước ngoài. Các tập tin, tôi đã được nói, được mã hóa theo định dạng UTF-8.StreamReader không thể đọc chính xác bộ ký tự mở rộng (UTF8)

Dưới đây là cốt lõi của mã của tôi:

using (FileStream fileStream = fileInfo.OpenRead()) 
{ 
    using (StreamReader reader = new StreamReader(fileStream, System.Text.Encoding.UTF8)) 
    { 
     string line; 

     while (!string.IsNullOrEmpty(line = reader.ReadLine())) 
     { 
      hashSet.Add(line); 
     } 
    } 
} 

Các tập tin chứa từ "achôcre" nhưng khi kiểm tra nó trong gỡ lỗi nó được thêm nó như là "achcre".

(Đây là một tập tin thô tục vì vậy tôi xin lỗi nếu bạn nói tiếng Pháp. Tôi cho một, không có ý tưởng điều đó có nghĩa)

Trả lời

16

Bằng chứng cho thấy rõ ràng rằng tập tin là không ở định dạng UTF-8. Hãy thử System.Text.Encoding.Default và xem nếu bạn nhận được văn bản chính xác sau đó - nếu bạn làm, bạn biết tập tin là trong Windows-1252 (giả sử đó là hệ thống mã mặc định của bạn). Trong trường hợp đó, tôi khuyên bạn nên mở tệp trong Notepad, sau đó lưu lại "Lưu dưới dạng" dưới dạng UTF-8 và sau đó bạn có thể sử dụng Encoding.UTF8 bình thường.

Một cách khác để kiểm tra xem mã hóa tệp thực sự là mở nó trong trình duyệt của bạn. Nếu dấu trọng âm hiển thị chính xác, thì trình duyệt đã phát hiện đúng bộ ký tự - vì vậy hãy xem trình đơn “Xem/Ký tự đặt” để tìm ra cái nào được chọn. Nếu các điểm nhấn không hiển thị chính xác, sau đó thay đổi bộ ký tự thông qua menu đó cho đến khi chúng thực hiện.

+0

Có vẻ như bạn đã đúng. Cảm ơn bạn về mẹo của trình duyệt! – PolandSpring

Các vấn đề liên quan