У меня есть этот файл. Это простой текстовый файл. Я пытаюсь найти способ просто прочитать этот файл в 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 может быть полезна и для преобразования кодировки