История изменений
Исправление Zubok, (текущая версия) :
Да, для этих двух ссылок у меня возвращается это:
У меня нет. Без принудительной установки в multibyte-buffer или charset в utf-8, у меня не преобразуется. Ничего не понимаю. Перепроверил кучу сайтов: грузинские, тайские, китайских пару, однобайтные koi8-r - все нормально. А этот - нет.
Уже этот абзац написал, а потом дошло. Ты же используешь теперь url-insert-file-contents. А эта функция преобразует в multibyte при вставке. То есть она рассматривает страницу как utf-8. Первый-то вариант с url-insert так не делает. Если нет кодировки, то он не преобразует. Или у тебя и с url-insert так работает?
Тогда понятно. Смотри: если он не увидел charset, он применяет эвристику. Вряд ли он парсит html на предмет <meta>. И docstring об этом же говорит. Эту функцию и использует url-insert-file-contents:
(defun url-insert-buffer-contents (buffer url &optional visit beg end replace)
"Insert the contents of BUFFER into current buffer.
This is like `url-insert', but also decodes the current buffer as
if it had been inserted from a file named URL."
(if visit (setq buffer-file-name url))
(save-excursion
(let ((start (point))
(size-and-charset (url-insert buffer beg end)))
(kill-buffer buffer)
(when replace
(delete-region (point-min) start)
(delete-region (point) (point-max)))
(unless (cadr size-and-charset)
;; If the headers don't specify any particular charset, use the
;; usual heuristic/rules that we apply to files.
(decode-coding-inserted-region (point-min) (point) url
visit beg end replace))
(let ((inserted (car size-and-charset)))
(list url (or (after-insert-file-set-coding inserted visit)
inserted))))))
Исходная версия Zubok, :
Да, для этих двух ссылок у меня возвращается это:
У меня нет. Без принудительной установки в multibyte-buffer или charset в utf-8, у меня не преобразуется. Ничего не понимаю. Перепроверил кучу сайтов: грузинские, тайские, китайских пару, однобайтные koi8-r - все нормально. А этот - нет.
Уже этот абзац написал, а потом дошло. Ты же используешь теперь url-insert-file-contents. А эта функция преобразует в multibyte при вставке. То есть она принудительно рассматривает страницу как utf-8. Первый-то вариант с url-insert так не делает. Если нет кодировки, то он не преобразует. Или у тебя и с url-insert так работает?
Тогда понятно. Смотри: если он не увидел charset, он применяет эвристику. Вряд ли он парсит html на предмет <meta>. И docstring об этом же говорит. Эту функцию и использует url-insert-file-contents:
(defun url-insert-buffer-contents (buffer url &optional visit beg end replace)
"Insert the contents of BUFFER into current buffer.
This is like `url-insert', but also decodes the current buffer as
if it had been inserted from a file named URL."
(if visit (setq buffer-file-name url))
(save-excursion
(let ((start (point))
(size-and-charset (url-insert buffer beg end)))
(kill-buffer buffer)
(when replace
(delete-region (point-min) start)
(delete-region (point) (point-max)))
(unless (cadr size-and-charset)
;; If the headers don't specify any particular charset, use the
;; usual heuristic/rules that we apply to files.
(decode-coding-inserted-region (point-min) (point) url
visit beg end replace))
(let ((inserted (car size-and-charset)))
(list url (or (after-insert-file-set-coding inserted visit)
inserted))))))