2009-04-09 82 views
19

Tôi có tệp được mã hóa ANSI và tôi muốn chuyển đổi các dòng tôi đã đọc từ tệp thành ASCII.Chuyển đổi tệp văn bản từ ANSI sang ASCII bằng C#

Tôi làm cách nào để thực hiện việc này trong C#?


EDIT: gì nếu tôi sử dụng "BinaryReader" BinaryReader reader = new BinaryReader(input, Encoding.Default); nhưng đọc này mất (Stream, Encoding) nhưng "Stream" là một bản tóm tắt! Và tôi nên đặt đường dẫn của tập tin mà anh ta sẽ đọc từ đâu?

+0

Tại sao bạn nghĩ rằng bạn muốn chuyển đổi nó sang ASCII? Câu trả lời cho điều đó có thể tiết lộ những gì bạn thực sự nên chuyển đổi sang ... – Guffa

Trả lời

30

Chuyển đổi trực tiếp từ ANSI sang ASCII có thể không phải lúc nào cũng có thể, vì ANSI là một siêu của ASCII.

Bạn có thể thử chuyển sang UTF8 sử ​​dụng Encoding, mặc dù:

Encoding ANSI = Encoding.GetEncoding(1252); 

byte[] ansiBytes = ANSI.GetBytes(str); 
byte[] utf8Bytes = Encoding.Convert(ANSI, Encoding.UTF8, ansiBytes); 

String utf8String = Encoding.UTF8.GetString(utf8Bytes); 

Tất nhiên bạn có thể thay thế UTF8 với ASCII, nhưng điều đó không thực sự có ý nghĩa từ:

  • nếu chuỗi gốc không chứa bất kỳ byte> 126 nào, sau đó đã là ASCII
  • nếu chuỗi gốc chứa một hoặc nhiều byte> 126, thì các byte đó sẽ bị mất

UPDATE:

Để đối phó với vấn đề cập nhật, bạn có thể sử dụng BinaryReader như thế này:

BinaryReader reader = new BinaryReader(File.Open("foo.txt", FileMode.Open), 
             Encoding.GetEncoding(1252)); 
23

Về cơ bản, bạn cần phải xác định một Encoding khi đọc/ghi tập tin. Ví dụ:

// read with the **local** system default ANSI page 
string text = File.ReadAllText(path, Encoding.Default); 

// ** I'm not sure you need to do this next bit - it sounds like 
// you just want to read it? ** 

// write as ASCII (if you want to do this) 
File.WriteAllText(path2, text, Encoding.ASCII); 

Lưu ý rằng một khi bạn đã đọc nó, text thực sự là unicode khi trong bộ nhớ.

Bạn có thể chọn các trang mã khác nhau bằng cách sử dụng Encoding.GetEncoding.

+0

Câu trả lời hay, đặc biệt là để chỉ ra rằng bạn có thể sử dụng các phương thức Tệp tĩnh và không cần phải liên quan trực tiếp đến FileStream hoặc bộ đệm. – Noldorin

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