LINUX.ORG.RU

История изменений

Исправление 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))))))