Как указано в prorgammers stackexchange в here,
Files generally indicate their encoding with a file header. There are many examples here. However, even reading the header you can never be sure what encoding a file is really using.
Я искал файлы трассировки в моей системе и нашел это, но это не имеет никакого курьез
2016-06-22 13:10 : 07 ☆ | [email protected] | Antonios-MacBook-Pro в ~/learn/lisp/stackoverflow/scripts ○ → файл -I ресурсы/hello.trace ресурсы/hello.trace: text/plain; charset = us-ascii
2016-06-22 13:11:50 ☆ | [email protected] | Antonios-MacBook-Pro в ~/learn/lisp/stackoverflow/скрипты ○ → cat resources/hello.trace println! { "Привет мир!" } печать! {concat! ("Hello, World!", "\ П")}
Так С помощью этого кода можно прочитать:
CL-USER> (with-open-file (in "/Users/toni/learn/lisp/stackoverflow/scripts/resources/hello.trace" :external-format :us-ascii)
(when in
(loop for line = (read-line in nil)
while line do (format t "~a~%" line))))
println! { "Hello, World!" }
print! { concat ! ("Hello, World!" , "\n") }
NIL
или даже на китайском или то, что было:

мы можем прочитать ascci характер, как этот
CL-USER> (format nil "~{~C~}" (mapcar #'code-char '(194)))
"Â"
или любой другой странный характер, так что кажется, что может быть символы с акцентами добавить это в файл:
println! { "Hello, World!" }
print! { concat ! ("Hello, World!" , "\n") }
Â
patatopita
, и я получаю ту же ошибку:
: ASCII ошибка декодирования потока на
для «Файл/Users/toni/learn/lisp/stackoverflow/scripts/resources/hello.trace " {1003994043}>:
Последовательность октетов # (195) не может быть расшифрована. [Состояние типа SB-INT: STREAM-DECODING-ERROR]
Итак, на этом этапе вы можете работать с соревнованиями и перезапусками, чтобы изменить характер, есть опция, я не специалист в этом виде кода, но там может быть рестарт с
Restarts:
0: [ATTEMPT-RESYNC] Attempt to resync the stream at a character boundary and continue.
1: [FORCE-END-OF-FILE] Force an end of file.
2: [INPUT-REPLACEMENT] Use string as replacement input, attempt to resync at a character boundary and continue.
3: [*ABORT] Return to SLIME's top level.
4: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {10050E0003}>)
ввода-замены, если не попробовать остроумие европейская как Latin-1 или ISO ....
CL-USER> (with-open-file (in "/Users/toni/learn/lisp/stackoverflow/scripts/resources/hello.trace" :external-format :latin-1)
(when in
(loop for line = (read-line in nil)
while line do (format t "~a~%" line))))
println! { "Hello, World!" }
print! { concat ! ("Hello, World!" , "\n") }
¬
patatopita
NIL
И он должен работать, удачи
поэтому давайте прочитаем с европейской кодировкой
«Как я могу обнаружить кодировку файла перед его открытием?» Вы используете спецификацию, соглашение или соглашение, откуда бы он ни появился. Кодировка не может быть обнаружена, потому что всегда существует множество действительных ответов на основе последовательности байтовых значений. Кроме того, текущее содержимое файла является только одним образцом содержимого. Если вы просто хотите избежать исключений и позволить ошибочно интерпретировать некоторые байты, вы можете использовать CP437. Вы можете улучшить свое предположение, пробовав все сотни кодировок, видя, что не дает исключений и сравнивает интерпретации. ┬ –
@TomBlodget Это не тот ответ, на который я надеялся, но, следовательно, ответ, который я искал, если нет истинного механизма обнаружения, который работает. Отправьте это как ответ, и я приму это. – Sim