Kodowanie polskich znaków

0

Cześć :)
Mojej pracy napotkałem na problem, który spędza mi sen z powiek :)

Obsługuję pliki pdf z popisem Profilu Zaufanego.
Zawartość pdf przychodzi w kodowaniu... no właśnie- i tutaj się zaczyna.

$codingName = ['UTF-16', 'ASCII', 'UTF-8', 'ISO-8859-16'];
mb_detect_order($codingName);
$codingSignName = mb_detect_encoding($pdf, $codingName, false);

$codingSingName wskazuje na ISO-8859-2

Z niego wyciągam imię i nazwisko osoby podpisującej plik pdf

W jednym przypadku mam treść nazwy osoby podpisującej to : Pawe› Morfin a drugi podpis to : ţ˙ M aB g o r z a t a K w i e c i e D

I teraz szukam rozwiązania, jak rozkodować te znaczki na polską czcionkę?

W pierwszym rozwiązaniu zadziała brzydki manewr $signName = str_replace(chr(155),'ł', $signName);

W drugim przypadku zadziała $signName = iconv('UTF-16', 'UTF-8', $signName);

I problem polega na tym, że jak ten pierwszy przepuszczę przez iconv to otrzymuję komunikat o niepoprawnych znakach w stringu :(

Chciałbym przygotować jedną metodę która rozpozna kodowanie i przetransformuje mi loginy na polską czcionkę :(

Proszę o pomoc :)

3

Ok, a może spróbuj inaczej - nie sugeruj się tym, co zostało wykryte, ale wpisz ręcznie parę możliwych kodowań i zobacz, czy coś się stanie.
Ogólnie to w PHP nie miałem z tym do czynienia, ale zauważyłem, że niektóre "wykrywacze kodowania" dają czasem wyniki z czapy - także nie ufaj na 100% temu, co się wykryło automagicznie.

0

Tak, ale na czymś muszę oprzeć założenia w metodzie ;/ wykonałem już chyba milin kombinacji w ustawianiu kodowania i żadna z nich nie działa dla obu przypadków ;)
Cała nadzieja w tych kombinacjach, których nie przetestowałem.

0

Może jest taka opcja, że oba podpisy mają ustawione inne kodowania i dlatego to nie działa. Czy jesteś w stanie chociaz tak ustawić/dopasować kodowanie, żeby jeden z nich był poprawny?

0

Niestety, albo jedno przejdzie przez iconv i pokazuje dobrze, albo musze dodać to co wyżej.
Mam świadomość że detektory nie potrafią wykryć kodowania w 100% (tak stoi w dokumentacji) ale wszelkie logiczne rozwiązania albo źle dekodowały- albo otrzymuję informacje do error_loga o niepoprawnych znakach w iconv ;/

2

Jak na razie, to nic na temat jak otwierasz tego PDF.
A temat jest znaczący. Nie wszystkie libki PDF-owe maja tę samą jakość itd...
jesli uzyskujesz z odstępami, z tego wnioskuję , masz taką właśnie niższej jakości.

Ja to widzę, bo jak próbuje wklejać np nr FV z pedeefa zrobionego na pewno w delphi, to mam takie odstępy, co wcale nie jest normalne - cała resztą świata daje poprawne stringi

Bez ustabilizowania naszej wiedzy o PDF, dyskusja o stronie kodowej jest akademicka

1

Detektory opierają się na wykryciu jakiegoś znaku/ znaków który powiedzmy występuje w konkretnym kodowaniu, problem tylko taki, że znak ą może być zinterpretowany jako jakiś krzak i też przejść.
Jeśli nie jesteś w stanie jednoznacznie ustalić ze źródła danych kodowania to proponuję potestować na większej ilości danych np. tu https://string-functions.com/encodedecode.aspx
ISO 8859-2 Jest standardem z MS tak jak 1250
Podejrzewam, że skoro są polskie znaki to masz jedno tych dwóch.
Na koniec sprawdź czy czcionka wybrana do tworzenia PDFa ma polskie znaki.

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