Quasus
Цитата:
Здравствуйте. Я даже боюсь предположить, при чем тут Вим. Хотите сказать, что тот же самый скрипт, будучи вызванным не из Вима, работает корректно?
А вообще, я бы попробовал использовать codecs.getreader('utf-8')(sys.stdin) вместо sys.stdin. Можно, наверное, даже переопределить:
sys.stdin = codecs.getreader('utf-8')(sys.stdin)
и аналогично вывод:
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
Цитата:
Здравствуйте.
У меня vim 7.3 на Windows. Собственно, настоящая проблема как раз из-за Windows.
Экспериментирую с фильтрацией (filtering) с помощью python-а 3.2. В vim-e текстовый файл в utf-8. Получать текст из питона я пробовал следующими способами:
sys.stdin.read()
— работает для русских и английских букв. Если сделать
sys.stdin.buffer.read().decode('cp1251'),
аналогично. Если же
sys.stdin.buffer.read().decode('utf-8'),
то для русских не работает. Для греческих букв в исходном файле не работает ни в каком варианте.
Насколько понимаю, когда вим передаёт текст питону, последний почему-то уверен, что это cp1251. Есть ли способ его разубедить?
Для полноты изложения пример скрипта:
import sys
#inp=sys.stdin.buffer.read().decode('cp1251')
inp=sys.stdin.read()
outp=inp + '\nαβγδ.'
sys.stdout.buffer.write(outp.encode())
# the following assumes the output should be in cp1251
# and doesn't accept Greek letters
#sys.stdout.write(outp)
Надеюсь, кто-нибудь сталкивался. Буду благодарен за подсказки. :-)
Здравствуйте. Я даже боюсь предположить, при чем тут Вим. Хотите сказать, что тот же самый скрипт, будучи вызванным не из Вима, работает корректно?
А вообще, я бы попробовал использовать codecs.getreader('utf-8')(sys.stdin) вместо sys.stdin. Можно, наверное, даже переопределить:
sys.stdin = codecs.getreader('utf-8')(sys.stdin)
и аналогично вывод:
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)