Как прочитать файл с неизвестной кодировкой

У меня есть этот файл. Это простой текстовый файл. Я пытаюсь найти способ просто прочитать этот файл в R и записать его обратно так же, как он был изначально закодирован . Моя мотивация заключается в том, чтобы иметь возможность надежно воспроизводить формат файла. Однако у меня возникают трудности с расшифровкой, как этот файл был закодирован.

Проблема заключается в строке 9, где он должен был прочитать что-то вроде

/V (½ þ ¾ → ‘ ’ ” “ •)

и в глубине души я знаю, что эти символы действительно кодируются в этом файле, потому что внешняя утилита (pdftk), которую я использую, может правильно их прочитать. Однако если я сделаю

 readLines('https://github.com/oganm/toSource/raw/master/cant_read.fdf', encoding = 'UFT-8') 

Я получаю предупреждение

 Warning message: In readLines("https://github.com/oganm/toSource/raw/master/cant_read.fdf", : line 9 appears to contain an embedded nul 

и строка 9 представляется усеченной и закодированной странно закодированной.

 readLines('https://github.com/oganm/toSource/raw/master/cant_read.fdf', encoding = 'UTF-8')[9] 
 [1] "/V (xfexff" 

Если я использую другую опцию latin1 я получаю неправильные символы вместе с тем же предупреждением

 readLines('https://github.com/oganm/toSource/raw/master/cant_read.fdf', encoding = 'latin1')[9] 
 [1] "/V (þÿ" 

Если посмотреть на отношения между двумя версиями, xfexff выглядит как латинские коды для этих символов, так что есть смысл, что это то, что я вижу. Однако я также знаю, что это не то, что я вижу.

Поскольку выходные данные readLines для начала усечены, в любом случае невозможно заново создать один и тот же файл, но моя конечная цель - иметь возможность манипулировать этим файлом, поэтому мне нужно более глубокое понимание того, что происходит.

Я также пробовал разные текстовые редакторы, чтобы открыть файл, используя разные параметры кодирования («UTF-8», «UTF-16», «Western»), но ни один из них, кажется, не показывает файл таким, какой он есть. Итак, вопрос в том, как я могу прочитать / написать этот файл и / или какие шаги я могу предпринять, чтобы помочь мне расшифровать его

Изменить: Если я пытаюсь пропустить встроенный нуль с помощью команды skipNul , проблема усечения решена, но у меня все еще остается странная кодировка, которую я не могу записать обратно в файл

 readLines('https://github.com/oganm/toSource/raw/master/cant_read.fdf', encoding = 'UTF-8',skipNul=TRUE)[9] 
[1] "/V (xfexffxbd xfe xbe !x92  30  31  35  34  ")"
 readLines('https://github.com/oganm/toSource/raw/master/cant_read.fdf', encoding = 'latin1',skipNul=TRUE)[9] 
  "/V (þÿ½ þ ¾ !' 30 31 35 34 ")" 

В latin1 некоторые символы по крайней мере правильно восстановлены. Но я не смог установить связь между остальной частью строки и исходным вводом

Примечание . þ не связано с фактическим þ в файле. Я на самом деле добавил þ позже, чтобы увидеть, как это повлияет на результат. Это ничего не изменило, что означает, что усечение происходит при кодировании ½ и данные, которые мы можем прочитать, вероятно, являются частью ½ .

Всего 1 ответ


Кодировка файла смешанная.

Кажется, что большая часть PDF находится на латинице 1, так как первые символы должны быть «% â». (См .: )

Однако текст в команде "/ V" закодирован в UTF-16 с прямым порядком байтов. Байт "fe ff" на самом деле является меткой порядка байтов текста.

Возможно, вам придется прибегнуть к использованию readBin и преобразовать байты в правильную кодировку. PDF-файлы ужасны для разбора.

Смотрите этот http://stat545.com/block034_useR-encoding-case-study.html пост о том, как читать файлы со смешанным кодированием с использованием readBin. Функция iconv может быть полезна и для преобразования кодировки


Есть идеи?

10000