2010-08-25 37 views
9

Ứng dụng ASP.NET của tôi nhập tệp CSV. Chúng chủ yếu được lưu trong bảng tính hoặc notepad yêu cầu 'bộ ký tự', ví dụ: ISO-8859-2, Windows-1210, DOS-852 hoặc Unicode(UTF-8).Sự khác biệt giữa trang mã và mã hóa ký tự là gì?

Wiki nói UTF-8 là mã hóa ký tự nhưng Windows-1210ISO-8859-2 là các trang mã. Các thuật ngữ này có thể hoán đổi cho nhau không?

.NET đọc tệp được lưu bằng UTF-8. Liệu nó phát hiện ra mã hóa chính nó?

Trả lời

3

Bạn có thể muốn kiểm tra article và điều này bài Joel Spolsky của here

+0

+1 Cảm ơn bạn đã liên kết bài viết! –

1

Quotes từ wiki:

"trang Mã là một tên khác cho mã hóa ký tự Nó bao gồm một bảng giá trị mô tả các nhân vật đặt cho một ngôn ngữ cụ thể.."

http://en.wikipedia.org/wiki/Code_page

và:

"trang mã Windows là tập hợp các ký tự hoặc các trang mã (gọi là bảng mã ký tự trong hệ điều hành khác) được sử dụng trong các hệ thống Microsoft Windows từ những năm 1980 và 1990 . "

1

Tôi nghĩ rằng đó là phần lớn lịch sử, nhưng có một sự khác biệt rõ ràng. Trang mã là bảng tra cứu, một byte cụ thể ánh xạ tới một ký tự cụ thể. Các trang mã khác nhau sử dụng các ánh xạ khác nhau. Trong những ngày xa xưa, những ánh xạ đó không thực sự được thực hiện. Mà yêu cầu bạn cũng có phông chữ có glyphs để phù hợp với trang mã. Vẫn còn một vấn đề ngày hôm nay btw, giao diện điều khiển các cửa sổ có một trang mã.

Không có ánh xạ trong mã hóa Unicode. Họ chỉ cần nén 32 bit thành định dạng hiệu quả. Các mã hóa Unicode khác nhau sử dụng các cách khác nhau để siết chặt các bit. Nhân vật luôn có một giá trị cố định (codepoint trong Unicode nói).

Tệp văn bản được mã hóa UTF phải có BOM, cho phép người đọc tự động phát hiện mã hóa. Không có quy ước nào tồn tại cho các tệp văn bản được mã hóa bằng trang mã. Nhận được văn bản tốt trong số họ là một chút của một crap shoot. Đó là một điều xấu nên chết rồi :)

+0

Mặc dù UTF-8, UTF-16 và UTF-32 hoàn toàn là thuật toán, có tồn tại các mã hóa Unicode như GB18030 và UTF-EBCDIC bao gồm các bảng ánh xạ. Ngoài ra, một BOM KHÔNG bắt buộc hoặc được đề xuất cho UTF-8. – dan04

+0

Brrr, vẫn trông giống như mã hóa bit cho tôi. Tương tự như cách UTF-8 ủng hộ ASCII. Có, một BOM là không cần thiết, nó chỉ là vô cùng ngu ngốc không bao gồm nó. Vấn đề là có một tiêu chuẩn được xác định rõ nếu bạn * làm * bao gồm nó. Trái ngược với tiêu chuẩn * no * cho văn bản được mã hóa trang mã. –

+0

Hãy đến với suy nghĩ của nó, cũng làm nổi bật trạng thái tự nhiên. Sử dụng một mã hóa weirdo hoặc cố tình bỏ qua một BOM là một 'lợi thế cạnh tranh'. –

0

Các lớp .NET như StreamReader mặc định là mã hóa UTF-8; nó không được phát hiện kỳ ​​diệu.

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