2012-05-08 34 views
5

Tôi có chương trình C# mà chúng tôi sử dụng để thay thế một số Giá trị với những người khác, được sử dụng sau khi làm tham số. Giống như 'NAME1' được thay thế bằng & 1, 'NAME2' với & 2, v.v.Đọc tập tin được mã hóa UNIX với C#

Vấn đề là dữ liệu sửa đổi nằm trên tệp văn bản được mã hóa trên UNIX và các ký tự đặc biệt như í, thậm chí trên bộ nhớ, được đọc dưới dạng hình vuông (Ký tự không hợp lệ). Các thông số kỹ thuật do tôi không thể kiểm soát được, tệp không thể thay đổi được và không có lựa chọn nào khác ngoài việc đọc nó như thế.

Tôi đã tryed để đọc với hầu hết các 130 Mã hoá C# cung cấp cho tôi với:

EncodingInfo[] info = System.Text.Encoding.GetEncodings(); 
string text; 
for (int a = 0; a < info.Length; ++a) 
{ 
     text = File.ReadAllText(fn, info[a].GetEncoding()); 
     File.WriteAllText(fn + a, text, info[a].GetEncoding()); 
} 

fn là đường dẫn tập tin để đọc. Đã kiểm tra tất cả các tập tin đã tạo (như 130), không ai trong số họ viết đúng cách í vì vậy hãy không hiểu ý tưởng và không thể tìm thấy bất kỳ thứ gì trên internet.

SOLUTION:

Hình như cuối cùng mã này làm việc để có được những văn bản đúng, cũng có thể, phải sửa chữa các bộ mã hóa tương tự cho phần Viết:

System.Text.Encoding encoding = System.Text.Encoding.GetEncodings()[41].GetEncoding(); 

String text = File.ReadAllText(fn, encoding); // get file text 

// DO ALL THE STUFF I HAD TO 

File.WriteAllText(fn, text, encoding) System.Text.Encoding.GetEncodings()[115].GetEncoding(); //Latin 9 (ISO) 

/* ALL THIS ENCODINGS WORKED APARENTLY FOR ME WITH ALL WEIRD CHARS I WAS ABLE TO WRITE :P 
    System.Text.Encoding.GetEncodings()[108].GetEncoding(); //Baltic (ISO) 
    System.Text.Encoding.GetEncodings()[107].GetEncoding(); //Latin 3 (ISO) 
    System.Text.Encoding.GetEncodings()[106].GetEncoding(); //Central European (ISO) 
    System.Text.Encoding.GetEncodings()[105].GetEncoding(); //Western European (ISO) 
    System.Text.Encoding.GetEncodings()[49].GetEncoding();  //Vietnamese (Windows) 
    System.Text.Encoding.GetEncodings()[45].GetEncoding();  //Turkish (Windows) 
    System.Text.Encoding.GetEncodings()[41].GetEncoding();  //Central European (Windows) <-- Used this one 
    */ 

Cảm ơn bạn rất nhiều vì bạn trợ giúp

Noman (1)

+2

Mã hóa là tệp được ghi trong? Không biết điều đó, tất cả những gì bạn phải tiếp tục là đoán. Đó là trên một máy UNIX là không thích hợp. – Oded

+1

+1 để đoán tự động !, nhưng bây giờ bạn phải quay lại nguồn của mình để tìm hiểu, như Oded nói, 'mã hóa nào là tệp được viết?'. Chúc may mắn! – shellter

+0

Xin lỗi vì đã nói rằng tôi không thể biết nguồn, chỉ có tôi biết là trên notepad được đánh dấu ở dưới cùng là UNIX ANSI, nó được tạo từ một con dơi sao chép [somefiles với *] myFile.txt. Tôi cho rằng hầu hết trong số họ đã được tạo từ chức năng "Lưu" từ Oracle hoặc từ tập lệnh Excel –

Trả lời

2

bạn phải có định dạng mã hóa phù hợp. hãy thử

sử dụng tệp -i. Điều đó sẽ xuất ra thông tin kiểu MIME cho tệp, cũng sẽ bao gồm bộ mã hóa ký tự. Tôi tìm thấy một man-page cho nó, quá :)

Hoặc thử enca

Nó có thể đoán và thậm chí chuyển đổi giữa các bảng mã. Chỉ cần xem trang người đàn ông.

Nếu bạn có định dạng mã hóa phù hợp, hãy tìm cách áp dụng định dạng này để đọc tệp của bạn.

Báo giá: How to find encoding of a file in Unix via script(s)

+0

Tìm ra giải pháp, nhưng không thể đăng nó cho đến khi thêm 6 giờ nữa =) –

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