Wenn Sie die ersten 20 Zeilen Ihrer Datei betrachten, ist es klar, dass die Codierung das Byte 0x8C als erstes Byte einiger Multibyte-Sequenzen verwendet. Die Codierungen, die diese Eigenschaft haben, sind:
- BIG5
- BIG5-HKSCS
- CP932
- CP936
- CP949
- CP950
- GB18030
- GBK
- Johab
- Shift_JIS
- Shift_JISX0213
sie wiederum Versuchen:
$ for encoding in BIG5 BIG5-HKSCS CP932 CP936 CP949 CP950 GB18030 GBK \
JOHAB Shift_JIS Shift_JISX0213; do \
if head -n 20 < unique_names_2012.txt | iconv -f $encoding -t UTF-8 > /dev/null 2> /dev/null; then \
echo $encoding ; \
fi; \
done
Mit GNU libiconv, druckt es
BIG5-HKSCS
CP950
GB18030
Ist es in GB18030 Codierung?
$ iconv -f GB18030 < unique_names_2012.txt
zeigt Hunderte von Zeilen, die Zeichen im PUA-Bereich verwenden. Obwohl nicht unmöglich, scheint es unwahrscheinlich.
Ist es in CP950-Codierung?
$ iconv -f CP950 < unique_names_2012.txt
gibt einen Konvertierungsfehler in Zeile 2294.
es in BIG5-HKSCS Codierung ist?
$ iconv -f BIG5-HKSCS < unique_names_2012.txt
gibt einen Konvertierungsfehler in Zeile 713.
also höchstwahrscheinlich die Datei in einer Variante von BIG5 codiert wird. Es gibt viele solcher Varianten, siehe http://haible.de/bruno/charsets/conversion-tables/Chinese.html. Möglicherweise ist es eine Erweiterung von CP950 oder eine Erweiterung von BIG5-HKSCS (da dies die beliebtesten Codierungen aus der BIG5 Familie heute sind).
Zusammenfassend werden solche Konvertierungsfehler durch unstandardisierte Proliferation von BIG5-Varianten verursacht.
Das Beste, was Sie tun können, ist, die ursprüngliche Datei in UTF-8-Codierung anzufordern; lass den Urheber damit umgehen.
Danke, es hilft wirklich sehr! –