Próbuję zidentyfikować dziwną postać, którą znalazłem w pliku, z którym pracuję:
$ cat file
�
$ od file
0000000 005353
0000002
$ od -c file
0000000 353 \n
0000002
$ od -x file
0000000 0aeb
0000002
Plik korzysta z kodowania ISO-8859 i nie można go przekonwertować na format UTF-8:
$ iconv -f ISO-8859 -t UTF-8 file
iconv: conversion from `ISO-8859' is not supported
Try `iconv --help' or `iconv --usage' for more information.
$ iconv -t UTF-8 file
iconv: illegal input sequence at position 0
$ file file
file: ISO-8859 text
Moje główne pytanie brzmi: jak mogę zinterpretować wyniki od
tutaj? Próbuję użyć tej strony, która pozwala mi tłumaczyć różne reprezentacje znaków, ale mówi mi, że 005353
jako „punkt kodu Hex” wydaje się być niewłaściwy, 卓
a 0aeb
jako „punkt kodu Hex”, ૫
który ponownie wydaje się błędny .
Tak więc, w jaki sposób można zastosować jedną z trzech opcji ( 355
, 005353
lub 0aeb
), aby dowiedzieć się, jaki charakter mają oni reprezentują?
I tak, próbowałem z narzędziami Unicode, ale nie wydaje się to być poprawnym znakiem UTF:
$ uniprops $(cat file)
U+FFFD ‹�› \N{REPLACEMENT CHARACTER}
\pS \p{So}
All Any Assigned Common Zyyy So S Gr_Base Grapheme_Base Graph X_POSIX_Graph
GrBase Other_Symbol Print X_POSIX_Print Symbol Specials Unicode
jeśli rozumiem opis znaku Unicode U + FFFD, to w ogóle nie jest to prawdziwy znak, ale symbol zastępczy dla uszkodzonego znaku. Ma to sens, ponieważ plik nie jest tak naprawdę zakodowany w UTF-8.
ë
właśnie to widzę, gdy dane są wykorzystywane w innym programie! Ale skąd mam to wiedzieć? Czy nie jest to gdzieś w danych, które podaję? Jak to znalazłeś? Aha próbowałem iconv
ze -f ISO-8859
jednak skarżył conversion from
ISO-8859' nie jest wspierani.
eb
i zignorować 0x
wskaźnik heksadecymalny lub cokolwiek to jest. Moja nieznajomość tego rodzaju rzeczy jest głęboka. Czy możesz opublikować odpowiedź wyjaśniającą, że @StephenKitt?
iconv
by się udało; i / lub mogłeś to sprawdzić np. na Wikipedii. W przypadku tego bardzo specyficznego kodowania działa również fileformat.info/info/unicode/char/00eb/index.htm (Unicode odpowiada ISO-8859-1 w zakresie 128-255, choć oczywiście żadne kodowanie UTF nie jest z nim zgodne ).
iconv
narzeka, ponieważ nie określiłeś źródłowego zestawu znaków, więc używa twojego domyślnego, którym jest prawdopodobnie UTF-8.)