Wyświetlanie znaków ASCII w terminalu Ubuntu

0

Witam.
Korzystam z Ubuntu 14.04. Piszę w VIM-ie, kompiluję w terminalu przez fpc, komenda:

fpc plik.pas.
Potrzebuję wyświetlić znak ASCII, robię to w następujący sposób:

write(chr(200));

Problem w tym, że ,,obrazki" nie są wyświetlane. Pojawia się jedynie kwadrat z liczbami:

0 0
0 3

Program uruchamiany jest w terminalu. Za równo na kodowaniu UTF-8 jak i ISO-8859-02 jest to samo. Co może być przyczyną? Szukałem tego błędu bądź grafiki w necie i nie znalazłem.
Z góry dziękuję za pomoc.

0

pokaż cały kod.

1

pojedynczy bajt o kodzie 200 nie jest prawidłowym znakiem UTF-8.
może powiedz JAKI znak chcesz wyświetlić?

0

Spróbuj kodowania IBM850. Było powszechnie stosowane na PC w starożytności.

0
program PostawNaMilion;
uses crt;
var i:integer;
    pytanie,czas,x,x1,y,y1:byte;
    kasa:longint;
    z:char;

procedure menu;
begin
   writeln('######################################');
   writeln('#                                     ');
   writeln('# MMMM    MMM    MMM  MMMMM					');
   writeln('# M   M  M	 M  M   M   M				');
   writeln('# M   M  M	 M  M 	    M			');
   writeln('# MMMM   M	 M   MMM    M				');
   writeln('# M      M	 M	M   M			');
   writeln('# M      M   M  M	M   M			');
   writeln('# M	      MMM    MMM					');
   writeln('# 					       ');
   writeln('#        					');
   writeln('#        					');
   writeln('#        					');
end;

procedure plansza;
begin
   writeln();writeln();
   writeln('  ########################################');
   writeln('  ##						');
   writeln('  ##						');
   writeln('  ##						');
   writeln('  ##						');
   writeln('  ##						');
   writeln('  #########################################						');
   writeln('  ##						');
   writeln('  ##						');
   writeln('  ##						');
   writeln('  ##						');
   writeln('  ##						');
   writeln('  ##						');
   writeln(chr(3),'  ;)');
end;


BEGIN
   clrscr;
   randomize;
   kasa:=1000000;
   plansza;


   read();
END.

Interesują mnie znaki z przedziału 180 - 220, aby ramkę zrobić:

user image

dodanie znacznika <code class="delphi"> - furious programming

0

Jest jeszcze: http://en.wikipedia.org/wiki/Code_page_437 które chyba jest tym czego szukasz, ale na Ubu 12.04 nie da się tego bezpośrednio ustawić. Może jest jakiś okrężny sposób.

0

@aron155 - tutaj trzeba nieco sprostować, bo w Twojej wypowiedzi widzę niekonsekwencję;

W tytule wątku i Twoim pierwszym poście napisałeś, że chcesz wyświetlić w konsoli znaki kodu ASCII, ale używasz znaku o kodzie 200; Otóż znak o takim kodzie nie zawiera się ani w zbiorze znaków ASCII, ani nie jest prawidłowy dla kodowania UTF-8; Więc użycie tego znaku dla wymienionych stron kodowych jest poważnym błędem;

Odpowiadając na pytanie - jeżeli w konsoli masz ustawioną stronę kodową UTF-8, to bez problemu możesz wyświetlić wszystkie znaki ze zbioru ASCII, dlatego że zbiór znaków ASCII jest w całości zawarty w zbiorze znaków strony kodowej UTF-8.

0

Tablice, z których wziąłem te znaki znalazłem opisane jako tablice ASCII. Skoro te znaki nie są nimi to jakimi znakami są? I w jaki sposób można je wstawić?

0

ASCII jest 7-bitowe, więc może przechowywać znaki o kodach od 0 do 127; Więc jeśli ktoś twierdzi, że "wyświetla znak o kodzie ASCII 200" to jest w błędzie i nie wie zupełnie o czym pisze;

W konsoli można wyświetlać znaki w różnych kodowaniach, tyle że trzeba konsoli ustawić odpowiednią stronę kodową; Na Ubuntu się nie znam (bo siedzę na Windowsach), więc mój poprzedni i obecny post ma na celu jedynie przypomnieć o stosowaniu poprawnej terminologii, aby uniknąć przykrych nieporozumień.

0

W takim razie użyłem błędnej terminologii, prawdopodobnie ze względu na niedouczenie bądź źle opisane tablice znajdujące się w internecie. To w takim razie jak mogę wyświetlić na Windowsie znaki z wklejonej przeze mnie tabelki? Spotkałem się z nimi już na Commodore, więc wątpię, aby zostały wyrzucone.

0

No to w końcu na jakim systemie ma ten kod działać? Na Ubuntu czy na Windows?

Jeśli na Windows, to zobacz pod te linki:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682064(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ms686036(v=vs.85).aspx

0

Kod kompiluję na obu systemach, do tej pory żadnych problemów nie było. Po skompilowaniu na Windowsie pod FPC 2.6 bodajże, znaki są wyświetlane prawidłowo. Czyli wina leży po stronie terminala i jego kodowania.

0

W swojej grze SnakeASCII (zobacz do załączników) pisanej w FPC korzystam także ze znaków spoza zakresu ASCII (śmieszne) do budowania węża oraz ramki planszy i pod Windows są wyświetlane poprawnie; Niestety jeszcze nie bawiłem się w rozwiązanie kompatybilne z Uniksami, więc tutaj nie doradzę.

0

Włączyłem grę na Linuxie przez Wine. Działać działa, ale pewnie nie te znaki miały się wyświetlić, co wyświetliły się u mnie ;) Próbowałem ze zmianą kodowania, nawet na tą ,,archaiczną" IBM850 i błąd jest nadal ten sam.

0

Ustawiłem w GNOME terminal kodowanie na IBM850 i taki kod:

program ideone;
var
    i: Integer;
begin
    for i := 180 to 200 do
        write(chr(i));
    writeln;
end.

Daje taki wynik:
┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚

A ten obrazek co ty podałeś to zgadza się chyba z cp437. Zresztą, co ja się będę powtarzał...

PS:
Gry pod DOSa warto odpalać w DosBoxie.

0

Twój kod na kodowaniu IBM850 działa mi prawidłowo, czyli wyświetla to samo co u Ciebie. Na innym kodowaniu pokazuje znak zapytania. Owszem, gry pod DOS-a najlepiej tak odpalać. A co z programami pisanymi pod terminal? ;)

1

Zakładając polską wersję Windowsa, znaki trzeba wyświetlać w kodowaniu CP852 jeśli nie ma uses crt; albo CP1250 jeśli jest uses crt; (bardzo denerwująca cecha FPC bodajże od 2.6 wzwyż)
Pod Linuksem obecnie używa się domyślnie UTF-8.

1 użytkowników online, w tym zalogowanych: 0, gości: 1