2010-12-11 40 views
5

Tôi đang sử dụng Microsoft.VisualBasic.Fileio.TextFieldParser để phân tích cú pháp tệp CSV được tạo bằng Excel 2003. Trình phân tích cú pháp đang hoạt động tuyệt vời với ngoại lệ là nó đang chuyển đổi các giá trị ascii mở rộng thành các dấu hỏi! Vì vậy, nếu nội dung tập tin là:Microsoft.VisualBasic.FileIO.TextFieldParser thay đổi ± Ascii 241 thành? Ascii 63

± 3
Các TextFieldParser đang trở lại
? 3

Tôi đã thử tất cả các mã hóa trong gói System.Text.Encoding không có may mắn. Tôi nghĩ rằng tôi đã có nó với UTF7 nhưng nó đã được thả các ký tự khác như thay thế dấu + với một không gian.

Mọi trợ giúp sẽ được đánh giá cao.

+1

Không có điều nào như 'ASCII 241'. Ý nghĩa của các byte 128-255 được xác định bởi ** mở rộng thành ** ASCII, và có rất nhiều thứ trong số này. –

+2

Bạn đã kiểm tra xem tệp được lưu là gì? Mở nó trong Notepad và chọn Save As, sẽ có một danh sách thả xuống mà bạn có thể chọn mã hóa từ đó. Kiểm tra những gì nó có, tôi nghi ngờ ANSI. Bạn có thể muốn thử và lưu nó như là UTF-8 và sau đó chạy nó thông qua ứng dụng của bạn một lần nữa. – Pieter

Trả lời

15

Microsoft.VisualBasic.Fileio.TextFieldParser mặc định thành mã hóa UTF8, nhưng tệp văn bản nằm trong mã hóa ANSI hiện tại của hệ thống. Sử dụng một trong các hàm tạo có mã hóa như: TextFieldParser(string path, Encoding defaultEncoding).

Bạn có thể chuyển vào System.Text.Encoding.Default để mã hóa hoặc xây dựng một Đối tượng mã hóa mới đi qua trong trang mã. Mặc định trên Windows tiếng Anh là 1252.

0
Dim s As String = "± 3" 
    'this produces the ? 
    Dim b() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(s) 

    'try this 
    Dim anEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding(28591) 
    b = anEncoding.GetBytes(s) 

    s = anEncoding.GetChars(b) 'check to see if it round-trips 
Các vấn đề liên quan