2009-09-16 10 views
10

Wiele języków ma funkcje, które przetwarzają tylko "zwykły tekst", a nie binarny. Czy to oznacza, że ​​dozwolone są tylko znaki z zakresu ASCII?Jaka jest różnica między tekstem jawnym a danymi binarnymi?

Binary jest tylko seria bajtów, nie jest ona podobna do zwykłego tekstu, który jest po prostu seria bajtów interpretowane jako znaki? Czy zatem tekst jawny może przechowywać te same formaty danych/protokoły, co pliki binarne?

+4

FYI, nie ma czegoś takiego jak zwykły tekst. http://www.joelonsoftware.com/articles/Unicode.html – harpo

+0

FYI, tekst jawny w tym kontekście nie jest UTF-8 i nie może reprezentować Unicode, ponieważ, jak już wspomniałem, jest to seria bajtów, nic ciekawszego. –

+0

Przypuszczam, że byłem trochę chytry. W końcu uwzględniłeś notowania lotnicze wokół "zwykłego tekstu". – harpo

Odpowiedz

3

One Rzeczą, która często oznacza, że ​​język może swobodnie interpretować znaki kontrolne, takie jak wartości 10 lub 13, jako terminatory linii logicznych. Innymi słowy, operacja wyjściowa może automatycznie dołączyć te znaki na końcu, a operacja wprowadzania może je usunąć z wejścia (i/lub zakończyć czytanie tam).

W przeciwieństwie do operacji języka we/wy, które reklamują pracę z "binarnymi" danymi, zwykle zawierają parametr wejściowy dla długości danych, na których można operować, ponieważ nie ma innej drogi (brak odczytu przeszłego końca pliku) wiedzieć, kiedy to się stanie.

+0

Załóżmy, że funkcja, do której dostarczam tekst jawny, przyjmuje ją jako ciąg znaków. Czy nie może zmierzyć długości przed transmisją, zamiast polegać na znakach kontrolnych? –

+2

To zależy od języka. W Adzie, bez cenzury. W języku C jedynym sposobem na to jest znalezienie terminatora linii (ASCII 0). Oznacza to, że nie można wyprowadzić tej wartości do pliku za pomocą procedur we/wy "ASCII", ale można użyć opartych na długości "binarnych" procedur. –

+0

Oczywiście i może dodać znak kontrolny (taki jak \ r \ n), lub nawet konwersje zestawu znaków do tego łańcucha, jeśli dane są traktowane jako binarne, nic nie zostanie dodane ani zmienione. – nos

6

zwykły tekst jest czytelny dla człowieka, to plik binarny jest zwykle nieczytelne przez człowieka, ponieważ jest złożony z druku i niedrukowalne znaków.

Spróbuj otworzyć plik jpeg za pomocą edytora tekstu (np. Notatnika lub vim), a zrozumiesz, o co mi chodzi.

Plik binarny jest zwykle konstruowany w sposób optymalizujący szybkość, ponieważ nie jest potrzebne przetwarzanie. Plik tekstowy można edytować ręcznie, a plik binarny nie.

+10

Jon Skeet może czytać pliki binarne. –

+0

Mam nadzieję, że jest to świt żartów Jona Skeeta w stylu Chucka Norrisa. – JMP

+0

Chuck Norris może odczytywać pliki binarne bezpośrednio z talerza. – fbrereto

4

"Plaintext" może mieć kilka znaczeń.

Jednym z najbardziej użytecznych w tym kontekście jest to, że jest to po prostu plik binarny, który jest zorganizowany w sekwencje bajtów, które określony system komputerowy może przetłumaczyć na skończony zestaw znaków "tekstowych".

Drugie znaczenie, nieco podłączony jest ograniczeniem, że wspomniany system powinien wyświetlić te „znaki tekstowe” jako symboli czytelnych przez ludzi jako członków rozpoznawalnej alfabetu. Często niepisaną implikacją jest to, że mechanizm translacji jest ASCII.

Trzecim, jeszcze bardziej ograniczającym znaczeniem jest to, że ten system musi być "prostym" edytorem/przeglądarką tekstu. Zwykle oznacza to kodowanie ASCII. Ale, naprawdę, istnieje BARDZO mała różnica między tobą, człowiekiem, czytając tekst zakodowany w jakimś funky formacie i wyświetlanym przez zastrzeżony program, a VI edytor tekstu czytający plik zakodowany w ASCII.

ciągu kontekście programowania, środowisko programowania (comprized Os + systemowych API + swoje możliwości językowe) definiuje zarówno zestaw znaków „tekst”, oraz zestaw kodowania to jest w stanie odczytać przekonwertować do nich " "znaki" tekstowe. Należy pamiętać, że nie musi to oznaczać ASCII, angielskiego lub 8 bitów - na przykład Perl może natywnie czytać i używać pełnego zestawu znaków "Unicode".

Aby odpowiedzieć na konkretne pytanie, na pewno można użyć „charakter” struny do przesyłania dowolnych sekwencji bajtów, z zastrzeżeniem, że muszą stosować konwencje terminacji ciąg. Problem polega na tym, że funkcje, które już istnieją, aby "przetwarzać dane znakowe", prawdopodobnie nie miałyby żadnej użytecznej funkcjonalności do obsługi danych binarnych.

3

Zasadniczo zależy to od języka/środowiska/funkcjonalności.

Dane binarne są zawsze takie: binarne. Przenosi się bez modyfikacji. Tryb

„Zwykły tekst” może oznaczać jedną lub więcej z następujących czynności:

  • strumień bajtów jest podzielony na linie. Ograniczniki linii to \ r, \ n lub \ r \ n lub \ n \ r. Czasami jest zależny od systemu operacyjnego (np. * Nix lubi \ n, a Windows lubi \ r \ n). Koniec linii może być dostosowany do aplikacji odczytu, aby można było dostosować kodowanie znaków.Środowisko może wykryć i/lub konwersji kodowania źródłowego do kodowania aplikacja oczekuje
  • prawdopodobnie kilka innych konwersji należy dodać do tej listy, ale nie mogę myśleć o nic więcej w tej chwili
2

Technicznie nic. Zwykły tekst jest formą danych binarnych. Główną różnicą jest jednak sposób przechowywania wartości. Pomyśl o tym, jak można zapisać liczbę całkowitą. W danych binarnych używałby formatu dopełnienia dwóch, prawdopodobnie zabierając 32 bity przestrzeni. W formacie tekstowym liczba zostanie zapisana jako seria cyfr Unicode. Tak więc liczba 50 byłaby przechowywana jako 0x32 (wyściełane, by wziąć 32 bity) w systemie binarnym, ale byłaby przechowywana jako "5" 0 w postaci zwykłego tekstu.