Emacs hexl-mode UTF8 BOM проблема - PullRequest
       2

Emacs hexl-mode UTF8 BOM проблема

3 голосов
/ 08 сентября 2011

Я столкнулся с чем-то немного странным с hexl-mode в Emacs (GNU Emacs 22.2.1 / Debian GNU Linux).

У меня был текстовый файл UTF8, к которому яхотел добавить спецификацию (маска порядка байтов: даже если не рекомендуется добавлять бессмысленную спецификацию в файл UTF8, в спецификации четко указано, что спецификация в файле UTF8 является допустимой).

Вот как файл видится командой file :

...$  file  /tmp/test.txt
/tmp/test.txt: UTF-8 Unicode English text

Работает следующее:

open the UTF8 file (without BOM) in text mode
add three ASCII characters at the beginning of the file
close the file   (<-- see, very important, I need to close the file)
M-x hexl-mode
M-x hexl-find-file  (re-opening the file but this time in hexl-mode)
M-x hexl-insert-hex-string
EFBBBF
C-x C-s (saving the file)
M-x hexl-mode-exit

Затем я получаю файл UTF-8с спецификацией, как показано здесь командой file :

...$  file  /tmp/test.txt
/tmp/test.txt: UTF-8 Unicode (with BOM) English text

(обратите внимание, что команда file обнаруживает это эвристически как UTF-8 с спецификацией "английский текст")но файл содержит много символов евро: я хочу сказать, что перед добавлением спецификации это НЕ файл ASCII, а уже файл UTF-8, как показано выше)

Однако япросто не могу открыть файл в Emacs сначала , затем вызвать hexl-mode , затем попытаться заменить первыйee символов на 0xEB 0xFF 0xBF (BOM) и затем сохраните.

Очевидно, что при переключении с (Текст) на (Hexl) возникают сумасшедшие проблемы с преобразованием.mode.

Я что-то упускаю из виду, или я немного сломан, чтобы преобразовать в / из Text / Hexl, и мне лучше сначала переключиться на hexl-mode , выполнить редактирование в шестнадцатеричном формате, затем сохранить& закрыть файл и снова открыть в текстовом режиме?

Ответы [ 2 ]

3 голосов
/ 08 сентября 2011

Если вы посмотрите на код hexl-find-file, вы увидите, что он вызывает find-file-literally, а затем переключитесь на hexl-mode.

Из документации find-file-literally

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

Таким образом, вы можете открыть файл с помощью find-file-literally, добавить 3 символа и затем переключиться на hexl-mode.

0 голосов
/ 16 мая 2019

Обратите внимание, что xml-файл с этим тегом будет автоматически преобразован в utf-16 с прямым порядком байтов при сохранении.

<?xml version="1.0" encoding="UTF-16"?>

Это автоматически сделает файл utf8 с bom после изменения и сохранения:

<?xml version="1.0" encoding="UTF-8"?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...