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
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ć
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
@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
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.