Brak polskich znaków w Lazarusie

0

Ostatnio zacząłem się bawić konsolą w Lazarusie.
Pierwsze, co chciałem zrobić to oczywiście możliwość wypisywania znaków diakrytycznych na standardowy output.
Zwyczajne:

Writeln('Zażółć gęślą jaźń');

Wypisuje w konsoli bliżej nieokreślone znaki, więc zaglądam na Wiki Lazarusa, a tam jest przykład (http://wiki.freepascal.org/Console_Mode_Pascal#Unicode_.28UTF8.29_output):

program uniconsole;
 
{$mode objfpc}{$H+}
{$APPTYPE CONSOLE}
 
uses
  {$IFDEF UNIX}
    {$IFDEF UseCThreads}
    cthreads,
    {$ENDIF}
  {Widestring manager needed for widestring support}
  cwstring,
  {$ENDIF}
  {$IFDEF WINDOWS}
  Windows, {for setconsoleoutputcp}
  {$ENDIF}
  Classes
  ;
 
var
UTF8TestString: string;
 
begin
{$IFDEF WINDOWS}
SetConsoleOutputCP(CP_UTF8);
{$ENDIF}
UTF8TestString:= 'rosé, водка and ούζο';
writeln ('plain: ' + UTF8TestString);
{Apparently we don't need UTF8ToConsole for this
UTF8ToConsole did not do anything for me in fact.}
end.

Który po skompilowaniu wypisuje mniej-więcej coś takiego:
ros ę, -| # and #
Czyli, daleko od docelowego tekstu :/

Próbowałem nawet bezpośrednio operować na funkcjach api:

Var bw : DWord;
    Str: String;
Begin
 SetConsoleOutputCP(CP_UTF8);
 Str := 'Zażółć gęślą jaźń';
 WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), @Str[1], Length(Str), bw, nil);

(oczywiście przy włączonym {$H+}) i brak efektów :/

Macie więc jakiś pomysł, jaki wymusić wyświetlanie znaków diakrytycznych w konsoli (w Windowsie)?

Edit: jeżeli normalnie otworzę "cmd", to mogę wpisywać znaki diakrytyczne, a i również uruchamiałem programy konsolowe wypisujące je, więc nie jest to wina braku czcionek itp.

0

Plik źródłowy ma kodowanie UTF-8?

0

A jaką wersję FPC masz?

Ja chcąc napisać konsolówkę korzystam z zewnętrznego FPC 2.6.0 i tam nie mam problemów z kodowaniem polskich znaków, jednak uruchamiając Lazarus'a i wybierając New -> Project -> Console Application już kodowanie nie działa...

2

Macie więc jakiś pomysł, jaki wymusić wyświetlanie znaków diakrytycznych w konsoli (w Windowsie)?

Generalnie to powiem że w FPC jak i Lazarusie to kodowania to niezły ból głowy. Lazarus się z tym kryje, ale w FPC to widać bardzo.

Nowszych wersji nie ściągam, póki stabilne nie będą; Dziwne to jest, bo razem z Lazarusem zainstalowała się ta sama wersja FPC co wcześniej osobno instalowałem, a mimo to na jednej koduje dobrze, na drugiej nie;

Widać IDE FPC inaczej koduje pliki. W Lazarusie domyślnie jest bodaj UTF8.

FPC 2.6.0... Podobno z 2.7.1 jest tak samo (gdzieś tam wyczytałem)

Wiesz ile różnych wersji 2.7.1 jest?

uruchamiając Lazarus'a i wybierając New -> Project -> Console Application już kodowanie nie działa...

Żeby zrobić program konsolowy używaj drugiej opcji (Program). Wtedy dostajesz czysty program. Mnie nie pytaj czemu tak to jest dziwnie zrobione...

Jest parę opcji co możesz zrobić:

  1. Przerobić plik na domyślny dla konsoli (ANSI OEM 852). Lazarus będzie miał problem ze zrozumieniem tych polskich znaków jako że bodaj nie wspiera tego typu.
  2. Kodowanie w Lazarusie ustawić na UTF8 (domyślne) i używać procedury UTF8ToConsole (Wymaga LCL).
    Nie mam pojęcia dlaczego ale FPC nie wydaje się rozumieć z windowsem w sprawie kodowania UTF8. Możesz spróbować spytać na kanale developerów FPC, może ktoś będzie potrafił Ci pomóc, jeżeli coś znajdziesz to daj znać, chętnie się sam dowiem.
0

Wiesz ile różnych wersji 2.7.1 jest?

Nie wiem, ale skoro nie jest to wersja stabilna, to pewnie parę(dziesiąt)(set) ich jest.
Po prostu podczas szukania informacji na ten temat trafiłem na jakieś forum i jakoś nie starałem się zapamiętać numerka rewizji :P

Tak czy siak - dzięki, pokombinuję z obiema (oboma? :P) podpunktami i zobaczymy co wyniknie.


Edit: UTF8ToConsole działa, dzięki :)
0
-123oho napisał(a)

Żeby zrobić program konsolowy używaj drugiej opcji (Program). Wtedy dostajesz czysty program. Mnie nie pytaj czemu tak to jest dziwnie zrobione...

To naprawdę dziwne, że tworząc przez New -> Project -> Console Application dostaję od razu zbudowaną klasę, której kształt jest podobny do aplikacji z GUI;

Druga sprawa to tworzenie aplikacji konsolowej przez New -> Project -> Program - od razu kompilując program jest wszystko dobrze, ale jak uruchomię go to dostaję Runtime Error 103 - śmieszne to jest, że opcja -WG jest standardowo zaznaczona przy zwykłej konsolówce...

No nic, trzeba się jakoś powolutku przyzwyczajać do nowego środowiska... :]

0

śmieszne to jest, że opcja -WG jest standardowo zaznaczona przy zwykłej konsolówce...

U mnie nie jest, zmieniłem sobie opcje domyślne... Przydatne żeby dodać swoje biblioteki z jakichś katalogów. A konsola przy GUI też się przydaje bo czasami nawet samo LCL tam pluje błędami. Zresztą to jeszcze nic w porównaniu z hardkorowymi problemami gdy coś się zepsuje w konfiguracji... Wtedy cyrki fajne.

Druga sprawa to tworzenie aplikacji konsolowej przez New -> Project -> Program - od razu kompilując program jest wszystko dobrze, ale jak uruchomię go to dostaję Runtime Error 103

Stdout/Stdin nie otwarte.

To naprawdę dziwne, że tworząc przez New -> Project -> Console Application dostaję od razu zbudowaną klasę, której kształt jest podobny do aplikacji z GUI;

Wiem, ale nigdy tego nie używałem więc nie wiem czy to przydatne czy nie. Ograniczam się do opcji 1, 2 i 4.

No nic, trzeba się jakoś powolutku przyzwyczajać do nowego środowiska...

Ledwo poznałeś a już parę postów na forum chwalących :P . Miłość od pierwszej kompilacji?

UTF8ToConsole działa, dzięki

Jak zależność od LCL Ci nie przeszkadza to super.

0
-123oho napisał(a)

Stdout/Stdin nie otwarte.

Zakręciłem się podczas pisania tamtego posta i nie usunąłem tej części; Sprawdzałem w Google kto miał taki problem i jak go rozwiązać; Wszystko przez to, że opcja -WG była domyślnie włączona; Miałem też problem z tym New -> Project -> Console Application bo też coś mi się działo dziwnego, ale teraz jest już ok;

-123oho napisał(a)

U mnie nie jest, zmieniłem sobie opcje domyślne...

Owszem, próbowałem, jednak coś się dzieje niedobrego, że nie zapamiętuje tych informacji... Może ja coś źle zrobiłem, nie wiem, później spróbuję jeszcze raz;

-123oho napisał(a)

Ledwo poznałeś a już parę postów na forum chwalących :P . Miłość od pierwszej kompilacji?

Owszem, ledwo poznałem, a już czuję, że się chyba pobierzemy :]

Przede wszsytkim cieszę się z poniższych rzeczy:

  • bardzo bogata standardowa paleta komponentów,
  • grupowanie kodu i możliwość zwinięcia danego bloku,
  • szeroka gama ustawień środowiska,
  • GUI oparte na zwyczajnych okienkach (w D7 to jakieś kosmate, np. głowne menu),
  • obsługa wizualnych stylów okien w edytorze formularzy,
  • itd. itp.
    których w D7 niestety nie ma (trudno się dziwić, 10-letie oprogramowanie); Niestety czas kompilacji trochę zbyt długo trwa, ale da się do tego przyzwyczaić - po prostu trzeba rzadziej kompilować :]

Jeszcze muszę odkryć gdzie ustawić, żeby po wpisaniu . (kropki) wyświetlał się automatycznie Code Completion oraz po wybraniu z niego jakiejś metody pokazywał się pasek z listą argumentów; Wtedy będę już w pełni szczęśliwy;

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