Tôi có một ứng dụng web cho phép người dùng tải lên nội dung của họ để xử lý. Công cụ xử lý mong đợi UTF8 (và tôi đang soạn XML từ các tệp của nhiều người dùng), vì vậy tôi cần đảm bảo rằng tôi có thể giải mã đúng các tệp được tải lên.Có thể tự động giải mã tệp người dùng thành Unicode không? [C#]
Vì tôi sẽ ngạc nhiên nếu bất kỳ người sử dụng tôi đã biết tập tin của họ thậm chí là mã hóa, tôi có rất ít hy vọng họ sẽ có thể chính xác định bảng mã (decoder) để sử dụng. Và như vậy, ứng dụng của tôi là trái với nhiệm vụ phát hiện trước khi giải mã.
Điều này có vẻ như một vấn đề phổ quát như vậy, tôi ngạc nhiên không tìm thấy khả năng khung hoặc công thức chung cho giải pháp. Có thể nào tôi không tìm kiếm với các cụm từ tìm kiếm có ý nghĩa?
Tôi đã triển khai phát hiện BOM nhận thức (http://en.wikipedia.org/wiki/Byte_order_mark) nhưng tôi không chắc chắn tần suất tệp sẽ được tải lên với BOM để chỉ mã hóa và điều này không hữu ích đối với hầu hết các tệp không phải UTF.
Câu hỏi của tôi đun sôi xuống:
- là phát hiện BOM-aware đủ cho phần lớn các tập tin?
- Trong trường hợp phát hiện BOM không thành công, bạn có thể thử các bộ giải mã khác nhau và xác định xem chúng có "hợp lệ" không? (Các nỗ lực của tôi cho biết câu trả lời là "không").
- Trong trường hợp nào thì tệp "hợp lệ" không thành công với khung công cụ mã hóa/giải mã C#?
- Có kho lưu trữ ở bất kỳ nơi nào có nhiều tệp với các mã hóa khác nhau để sử dụng để thử nghiệm không?
- Trong khi tôi hỏi cụ thể về C# /. NET, tôi muốn biết câu trả lời cho Java, Python và các ngôn ngữ khác cho lần sau tôi phải làm điều này.
Cho đến nay tôi đã tìm thấy:
-
A "hợp lệ" UTF-16 tập với Ctrl-S nhân vật đã gây ra mã hóa sang UTF-8 để ném một ngoại lệ(nhân vật bất hợp pháp?) (Đó là ngoại lệ mã hóa XML.) - Giải mã tệp UTF-16 hợp lệ với UTF-8 thành công nhưng cung cấp văn bản có ký tự rỗng. Huh?
- Hiện tại, tôi chỉ mong đợi các tệp UTF-8, UTF-16 và có thể là ISO-8859-1, nhưng tôi muốn giải pháp có thể mở rộng nếu có thể.
- Tập hợp tệp đầu vào hiện tại của tôi không đủ rộng để phát hiện tất cả các sự cố xảy ra với tệp trực tiếp.
- Mặc dù các tệp tôi đang cố gắng giải mã là "văn bản" Tôi nghĩ chúng thường được tạo bằng các phương thức để lại các ký tự rác trong các tệp. Do đó các tệp "hợp lệ" có thể không phải là "thuần túy". Oh niềm vui.
Cảm ơn.
bạn làm cho gì nghĩ UTF-8 và UTF-16 tương thích? Một cửa hàng dữ liệu trong khối byte đơn, khác trong khối 2-byte ... –
BOM chủ yếu được sử dụng trên hệ điều hành Microsoft, Unices thích mã hóa withoug BOM. – Vlad
Cho dù ký tự 'Ctrl-S' có được phép hay không, không phụ thuộc vào định dạng của bạn. Cả UTF-8 và UTF-16 đều có thể mã hóa 'Ctrl-S', chỉ dành cho phần mềm (sử dụng UTF-8 thu được) ký tự này có thể là bất ngờ. – Vlad