Hej. Chcę np przesłać zdjęcie png jako ciąg znaków. Kiedy próbuję to zrobić czyli tworzę plik png potem kopiuję zawartość otwierając txt i tworzę nowy plik txt zapisuję tam znaki i zmieniam rozszerzenie na png to to nie działa i dostaję komunikat "prawdopodobnie ten format pliku nie jest obsługiwany"
Każdy plik jak podejrzysz w Hex edytorze ma swój nagłówek. Na jego podstawie programy potrafią rozpoznać typ.
https://en.m.wikipedia.org/wiki/List_of_file_signatures
Jeśli więc tworzysz plik txt to masz już w nim nagłówek. Potem kopiujesz zawartość z pliku PNG ale sam nagłówek zostaje.
Ja bym zaczął od sprawdzenia pliku w Hex edytorze.
Czyli plik txt ma w sobie coś mimo że ja widzę że jest pusty ?
Podejrzyj sobie go jakimś Hex edytorem to się przekonasz.
Jak free hex editor neo ?
dostaję to samo co przy otwieraniu notatnikiem
kamil kowalski napisał(a):
Hej. Chcę np przesłać zdjęcie png jako ciąg znaków. Kiedy próbuję to zrobić czyli tworzę plik png potem kopiuję zawartość otwierając txt i tworzę nowy plik txt zapisuję tam znaki i zmieniam rozszerzenie na png to to nie działa i dostaję komunikat "prawdopodobnie ten format pliku nie jest obsługiwany"
Jeśli plik jest mały możesz zamienić go na base64.
Nie możesz przesyłać pliku binarnego jako tekstu. Polegniesz na znakach nowej linii, mogą też być problemy z niektórymi innymi znakami specjalnymi oraz UTF. A jeśli chcesz otworzyć plik binarny w edytorze do plików tekstowych, to polegniesz na wszystkim naraz. Wyedytuj sobie w edytorze tekstowym jakikolwiek plik exe i bez robienia żadnych zmian spróbuj go zapisać i uruchomić (acz wieki temu edytowałem w wordpadzie scorch.exe, zmieniłem jeden string i program wystartował, zawiesił się dopiero w trakcie grania).
Standardem do przesyłania plików binarnych jako tekst jest base64, co prawda dodaje 33% rozmiaru (z każdych 8 bitów wykorzystuje tylko 6), ale w naszych czasach cóż to jest.
Czy przesył może być stratny? Jeśli tak to możesz skorzystać z dobrodziejstw nowoczesnej technologii i zaadaptować konwersję Image(binary) -> ASCII Art (text) -> AI augmented image recovery from ASCII Art (binary)
. Powodzenia!
jurek1980 napisał(a):
Każdy plik jak podejrzysz w Hex edytorze ma swój nagłówek. Na jego podstawie programy potrafią rozpoznać typ.
To nieprawda - pliki .txt
nie mają nagłówka (*). Tak samo jak pliki .ini
, .py
, skrypty shellowe, obrazy dysku, itp nie mają nagłówka.
(*) BOM się nie liczy, dla nitpickujących. Można zapisać plik .txt
bez BOM. Co do zasady puste pliki .txt mają 0 bajtów.
ŁF napisał(a):
Nie możesz przesyłać pliku binarnego jako tekstu. Polegniesz na znakach nowej linii, mogą też być problemy z niektórymi innymi znakami specjalnymi oraz UTF. A jeśli chcesz otworzyć plik binarny w edytorze do plików tekstowych, to polegniesz na wszystkim naraz. Wyedytuj sobie w edytorze tekstowym jakikolwiek plik exe i bez robienia żadnych zmian spróbuj go zapisać i uruchomić (acz wieki temu edytowałem w wordpadzie scorch.exe, zmieniłem jeden string i program wystartował, zawiesił się dopiero w trakcie grania).
To jest poprawna odpowiedź - z wielu różnych powodów nie możesz otworzyć dowolnego pliku jako tekst, skopiować go, wkleić gdzieś, zapisać i liczyć że dostaniesz to samo w wyniku.
Standardem do przesyłania plików binarnych jako tekst jest base64, co prawda dodaje 33% rozmiaru (z każdych 8 bitów wykorzystuje tylko 6), ale w naszych czasach cóż to jest.
Tak jak kilka osób napisało, musisz zaenkodować ten plik w base64. Wtedy dostajesz plaintext który łatwo skopiować i wkleić. Przykładowo, konwersja pliku meme.png do tekstowego pliku base64.txt:
msm@transient ~/Pictures
$ base64 meme.png > base64.txt
Wynik tego polecenia to tekst który możesz skopiować, zapisać gdzieś i zdekodować (używając base64 -d base64.txt
).
Powyższe polecenia działają na Linuxie. Na windowsie da się to zrobić naokoło używając narzędzia certutil
(bardzo nie polecam), za pomocą powershella (nie polecam), albo za pomocą WSL (polecam).