2009-09-16 85 views
10

Nhiều ngôn ngữ có chức năng chỉ xử lý "bản rõ" chứ không phải nhị phân. Điều này có nghĩa là chỉ các ký tự trong phạm vi ASCII mới được phép không?Sự khác biệt giữa bản rõ và dữ liệu nhị phân là gì?

Nhị phân chỉ là một chuỗi các byte, không phải là nó giống với bản rõ mà chỉ là một chuỗi các byte được hiểu là ký tự? Vì vậy, plaintext có thể lưu trữ cùng một định dạng dữ liệu/giao thức như nhị phân?

+4

FYI, không có nội dung nào như văn bản thuần túy. http://www.joelonsoftware.com/articles/Unicode.html – harpo

+0

FYI, văn bản thuần túy trong ngữ cảnh này không phải là UTF-8 và nó không thể đại diện cho Unicode, vì như tôi đã nói trước đây, nó là một chuỗi các byte, không có gì huyền ảo. –

+0

Tôi cho rằng tôi đã có một chút snide. Sau khi tất cả, bạn đã bao gồm các dấu ngoặc kép xung quanh "plaintext". – harpo

Trả lời

3

Một điều nó thường có nghĩa là ngôn ngữ có thể cảm thấy tự do để giải thích các ký tự điều khiển certian, chẳng hạn như các giá trị 10 hoặc 13, như các thuật ngữ dòng logic. Nói cách khác, một hoạt động đầu ra có thể tự động gắn thêm các ký tự này ở cuối và thao tác đầu vào có thể tách chúng khỏi đầu vào (và/hoặc chấm dứt đọc ở đó).

Ngược lại, các hoạt động I/O ngôn ngữ quảng cáo hoạt động trên dữ liệu "nhị phân" thường bao gồm thông số đầu vào cho độ dài của dữ liệu để hoạt động vì không có cách nào khác (thiếu đọc cuối tập tin) để biết khi nào nó được thực hiện.

+0

Giả sử hàm tôi đang cung cấp văn bản thuần túy, lấy nó làm chuỗi. Nó có thể không đo chiều dài trước khi truyền, thay vì dựa vào các ký tự điều khiển không? –

+2

Điều đó tùy thuộc vào ngôn ngữ. Ở Ada, chắc chắn rồi. Trong C, cách duy nhất để làm điều đó là tìm một terminator dòng (ASCII 0). Điều đó có nghĩa là bạn không thể xuất giá trị đó vào một tệp bằng cách sử dụng các thường trình I/O "ASCII", nhưng có thể sử dụng các thường trình "nhị phân" dựa trên chiều dài. –

+0

Chắc chắn, và nó có thể thêm một ký tự điều khiển (chẳng hạn như \ r \ n), hoặc thậm chí làm ký tự đặt chuyển đổi cho chuỗi đó, nếu dữ liệu được coi là nhị phân, không có gì sẽ được thêm hoặc thay đổi. – nos

6

văn bản thuần túy có thể đọc được bằng con người, tệp nhị phân thường không thể đọc được bởi con người, vì nó bao gồm các ký tự có thể in và không thể in được.

Hãy thử mở tệp jpeg bằng trình chỉnh sửa văn bản (ví dụ: notepad hoặc vim) và bạn sẽ hiểu ý tôi.

Tệp nhị phân thường được tạo theo cách tối ưu hóa tốc độ vì không cần phân tích cú pháp. Một tệp văn bản thuần túy có thể chỉnh sửa bằng tay, không phải tệp nhị phân.

+10

Jon Skeet có thể đọc các tệp nhị phân. –

+0

Tôi hy vọng đây là buổi bình minh của trò đùa Jon Nkeis theo phong cách Chuck Norris. – JMP

+0

Chuck Norris có thể đọc các tập tin nhị phân ngay trên đĩa. – fbrereto

4

"Bản rõ" có thể có nhiều ý nghĩa.

Điều hữu ích nhất trong ngữ cảnh này là nó chỉ là một tệp nhị phân được sắp xếp theo chuỗi byte mà một hệ thống máy tính cụ thể có thể dịch thành một tập hợp hữu hạn những gì nó coi là "văn bản" ký tự.

Ý nghĩa thứ hai, được kết nối một phần, là hạn chế cho biết hệ thống sẽ hiển thị "ký tự văn bản" này dưới dạng biểu tượng có thể đọc được bởi con người làm thành viên của bảng chữ cái dễ nhận biết. Thông thường, ý nghĩa bất thành văn là cơ chế dịch là ASCII.

Ý nghĩa thứ ba, thậm chí còn hạn chế hơn, là hệ thống này phải là trình soạn thảo/trình xem văn bản "đơn giản". Thường ngụ ý mã hóa ASCII. Nhưng, thực sự, có rất ít sự khác biệt giữa bạn, con người, đọc văn bản được mã hóa ở một số định dạng sôi nổi và được hiển thị bởi một chương trình độc quyền, so với trình soạn thảo văn bản VI đọc tệp mã hóa ASCII.

Trong ngữ cảnh lập trình, môi trường lập trình của bạn (được API OS + tích hợp + khả năng ngôn ngữ của bạn) xác định cả bộ ký tự "văn bản" và bộ mã hóa có thể đọc để chuyển đổi thành các ký tự này " văn bản "ký tự. Xin lưu ý rằng điều này có thể không nhất thiết ngụ ý ASCII, tiếng Anh hoặc 8 bit - như một ví dụ, Perl có thể đọc và sử dụng bộ ký tự Unicode đầy đủ.

Để trả lời câu hỏi cụ thể của bạn, bạn chắc chắn có thể sử dụng chuỗi "ký tự" để truyền các chuỗi byte tùy ý, với báo trước rằng các quy ước chấm dứt chuỗi phải được áp dụng. Vấn đề là các hàm đã tồn tại để "xử lý dữ liệu ký tự" có thể sẽ không có bất kỳ chức năng hữu ích nào để xử lý dữ liệu nhị phân của bạn.

3

Nói chung, nó phụ thuộc vào ngôn ngữ/môi trường/chức năng.

Dữ liệu nhị phân luôn là: nhị phân. Nó được chuyển mà không sửa đổi.

chế độ "văn bản Plain" có nghĩa là một hoặc nhiều trong những điều sau đây:

  • dòng byte được chia thành dòng. Các dấu phân tách dòng là \ r, \ n hoặc \ r \ n hoặc \ n \ r. Đôi khi nó phụ thuộc vào hệ điều hành (như * nix thích \ n, trong khi các cửa sổ thích \ r \ n). Kết thúc dòng có thể được điều chỉnh cho ứng dụng đọc
  • mã hóa ký tự có thể được điều chỉnh.Môi trường có thể phát hiện và/hoặc chuyển đổi bảng mã nguồn thành mã hóa các ứng dụng mong muốn
  • lẽ một số chuyển đổi khác nên được bổ sung vào danh sách này, nhưng tôi không thể nghĩ ra bất kỳ hơn tại thời điểm này
2

Về mặt kỹ thuật không có gì. Văn bản thuần túy là một dạng dữ liệu nhị phân. Tuy nhiên sự khác biệt chính là cách các giá trị được lưu trữ. Hãy suy nghĩ về cách một số nguyên có thể được lưu trữ. Trong dữ liệu nhị phân, nó sẽ sử dụng định dạng bổ sung của hai, có thể lấy 32 bit không gian. Trong định dạng văn bản, một số sẽ được lưu trữ thay vì một chuỗi các chữ số unicode. Vì vậy, số 50 sẽ được lưu trữ như 0x32 (đệm để mất 32 bit) trong nhị phân nhưng sẽ được lưu trữ là '5' '0' trong văn bản thuần túy.

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