Если я бегу codeКак я могу выводить unicode в буфер сообщений emacs?
# -*- coding: utf-8 -*-
month = "März"
print month.decode("utf-8")
в OS X терминала, я получаю строку März
просто отлично.
Кроме того, мои emacs (24,5 на OS X 10.10), похоже, обрабатывают unicode (или, по крайней мере, умлауты) просто отлично, так как я вижу умлаут в моем окне emacs.
Тем не менее, когда я запускаю выше код непосредственно из Emacs я получаю:
Traceback (most recent call last):
File "unicode-umlaut.py", line 3, in <module>
print month.decode("utf-8")
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 1: ordinal not in range(128)
Что это значит? Означает ли это, что хотя emacs обрабатывает символ latin-1, буфер сообщений emacs отказывается обрабатывать unicode? Есть ли исправление, позволяющее выводить символы не-ascii в буфер сообщений в emacs?
Update:
побайтно файл выглядит (через Emacs Hexl-режиме), как это:
00000000: 2320 2d2a 2d20 636f 6469 6e67 3a20 7574 # -*- coding: ut
00000010: 662d 3820 2d2a 2d0a 6d6f 6e74 6820 3d20 f-8 -*-.month =
00000020: 224d c3a4 727a 220a 7072 696e 7420 6d6f "M..rz".print mo
00000030: 6e74 682e 6465 636f 6465 2822 7574 662d nth.decode("utf-
00000040: 3822 290a 8").
В c3a4 карты к-умляут (а), и поэтому файл похоже, правильно закодирован в UTF-8.
Я не совсем уверен, что понимаю. Вы подозреваете, что кодировка файла неверна. Теперь я добавил шестнадцатеричный дамп файла. Не подтверждает ли это, что файл правильно закодирован в UTF-8? – Calaf
Да, это выглядит хорошо. Другая возможность заключается в том, что ваш терминал ожидает одну кодировку, но ваша конфигурация терминала неправильно сообщает об этом Python. Какова ценность переменной среды LANG? –