Poprawna obsługa 8-bitowych kodów ASCII

0

Delphi poprawnie obsługuje 7-bitowe kody ASCII, natomiast przy kodach 8-bitowych
pojawiają się nieprawidłowości, Chodzi mi o zestaw ASCII zawierający polskie ( i nie tylko)
znaki diakrytyczne, a nie ten z elementami ramek. Obecnie w miejsce znaków 8-bitowych pojawiają się
pytajniki. Czy można "zmusić" Delphi do udostępnienia kodów 8-bitowych?
Proszę o pomoc

2

Po kolei:

  • jaka wersja Delphi?
  • jako co trzymasz te zmienne/jak je deklarujesz
  • na jakim systemie to odpalasz? (zakładam że Windows - ale jaki? Wersja PL?)
  • jak masz ustawione kodowanie w projekcie?
  • czy korzystasz/kojarzysz takie coś: SetCodePage - https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.SetCodePage
  • co znaczy "pojawiają się nieprawidłowości" - gdzie? Wypisujesz do do konsoli? Jakiejś kontrolki na formatce? Zapisujesz do pliku?
  • tak poza tym - daj jakiś przykładowy kod, który generuje problem. W ten sposób będzie o wiele łatwiej coś ustalić
3

We wszystkich nowych wersjach Delphi (chyba od wersji 2009) string jest odpowiednikiem UnicodeString, więc jak chcesz mieć polskie znaki w kodowaniu ANSI (ASCII to właśnie tylko 7-bit) musisz przekonwertować UnicodeString do AnsiString - oczywiście musisz wybrać też docelowe kodowanie (Windows-1250, ISO-8859-2 czy inne): https://stackoverflow.com/questions/26892449/converting-unicodestring-to-ansistring

2

@Marek Detka: ja bym poprosił wersję "Jak byś dla dziewczyny tłumaczył która nie pracuje jako programista , w wersji z obrazkami"
Bo podejrzewam że wiem o co Ci chodzi ale drzewo możliwych odpowiedzi jest tak duże że nie che mi się tego wszystkiego przepisywać
Jak podasz więcej szczegółów to wybiorę odpowiednie rozgałęzienie problemu :D

I jeszcze napisz ze jestes pewny ze to Delphi a nie Lazarus

1

Tak gwoli ścisłości, bo zauważam problem z rozumieniem tego jak działają kodowania.

Marek Detka napisał(a):

Delphi poprawnie obsługuje 7-bitowe kody ASCII, natomiast przy kodach 8-bitowych pojawiają się nieprawidłowości,

Delphi poprawnie obsługuje wszystkie wspierane kodowania. To co napisałeś brzmi jak bug, ale nim nie jest. 😉

Chodzi mi o zestaw ASCII zawierający polskie ( i nie tylko) znaki diakrytyczne, a nie ten z elementami ramek.

ASCII nigdy nie zawiera znaków diakrytycznych — zawsze opisuje 7-bitowe, uniwersalne znaki (łącznie jest ich 128). Bajt w typowych pecetach zajmuje 8-bitów, więc można rozszerzyć pulę dostępnych jednobajtowych kodów znaków do 256. I to robi kodowanie ANSI — pierwsze 128 znaków zawsze są zgodne z ASCII, natomiast zestaw kolejnych 128 determinuje strona kodowa.

Dla przykładu, polskie litery diakrytyzowane znajdują się w stronie Windows-1250 (lub inaczej CP-1250), czyli w stronie do reprezentacji tekstów w językach środkowoeuropejskich, używających alfabetu łacińskiego, w systemach Windows rzecz jasna.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.