У меня есть этот файл. Это простой текстовый файл. Я пытаюсь найти способ просто прочитать этот файл в 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 (\xfe\xff"
Если я использую другую опцию latin1
, я получаю неправильные символы вместе с тем же предупреждением
readLines('https://github.com/oganm/toSource/raw/master/cant_read.fdf',
encoding = 'latin1')[9]
[1] "/V (þÿ"
Глядя на отношения между двумя версиями, \xfe\xff
выглядит как латинские коды для этих символов, так что имеет смысл, что это то, что я вижу. Однако я также знаю, что это не то, что я вижу.
Так как вывод readLines
для начала усечен, невозможно в любом случае заново создать один и тот же файл, но моя конечная цель - иметь возможность манипулировать этим файлом, поэтому мне нужно более глубокое понимание того, что происходит .
Я также пробовал разные текстовые редакторы, чтобы открыть файл, используя разные опции кодирования («UTF-8», «UTF-16», «Western»), но ни один из них, кажется, не показывает файл таким, какой он есть. Итак, вопрос как я могу прочитать / написать этот файл и / или какие шаги я могу предпринять, чтобы помочь мне расшифровать его
Редактировать: Если я попытаюсь пропустить вставленный nul с помощью команды skipNul
, проблема усечения будет решена, но у меня все еще остается странная кодировка, которую я не могу записать обратно в файл
readLines('https://github.com/oganm/toSource/raw/master/cant_read.fdf',
encoding = 'UTF-8',skipNul=TRUE)[9]
[1] "/V (\xfe\xff\xbd \xfe \xbe !\x92 \030 \031 \035 \034 \")"
readLines('https://github.com/oganm/toSource/raw/master/cant_read.fdf',
encoding = 'latin1',skipNul=TRUE)[9]
"/V (þÿ½ þ ¾ !’ \030 \031 \035 \034 \")"
В latin1
некоторые символы по крайней мере правильно восстановлены. Но я не смог установить связь между остальной частью строки и исходным вводом
Примечание: Отображаемое þ
не связано с фактическим þ
в файле. Я на самом деле добавил þ
позже, чтобы посмотреть, как это повлияет на вывод. Это ничего не изменило, что означает, что усечение происходит при кодировании ½
, и данные, которые мы можем прочитать, вероятно, являются частью ½
.