Как визуализировать арабские строки в фреймворке Bottle?

Я изучаю фреймворк Bottle и новичок в Python. Только что наткнулся на эту сложность. Когда я пишу простой метод для возврата арабской строки, например:

@route('/hello')
def hello():
    return u'سلام'

Я получаю это сообщение об ошибке в терминале:

SyntaxError: не-ASCII-символ '\xd8' в файле hello.py в строке 15, но кодировка не объявлена; см. http://www.python.org/peps/pep-0263.html подробности

Я импортировал все из бутылки и попытался добавить другие методы, упомянутые в документах, где это говорит об «Изменении кодировки по умолчанию», однако мне не удалось решить проблему. Так что я ценю ваши намеки.


person qliq    schedule 09.09.2011    source источник
comment
Что именно вы делаете, чтобы получить это сообщение об ошибке???   -  person rocksportrocker    schedule 10.09.2011
comment
перейдите по ссылке в сообщении об ошибке.   -  person JBernardo    schedule 10.09.2011
comment
Ошибки появляются в терминале, когда я запускаю скрипт: 'python hello.py'   -  person qliq    schedule 10.09.2011
comment
по крайней мере, вам нужно напечатать hello(), чтобы получить ошибку?   -  person rocksportrocker    schedule 10.09.2011
comment
@rocksportrocker: это фреймворк, и для рендеринга строк не требуется «печать».   -  person qliq    schedule 10.09.2011


Ответы (4)


Вот мой код для тестирования:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from bottle import *

@route('/hello')
def hello():
    return u'سلام'

run(host='127.0.0.1', port=8080,reloader=True)

В моем редакторе я выбираю «Файл» > «Сохранить как...», затем выбираю Unicode (UTF-8) в качестве кодировки текста и сохраняю как hello.py.

Затем загрузите последнюю версию Bottle.py с github и поместите ее в той же папке (например, бутылка-тест) с hello.py

Запускаю, вроде никаких проблем.

~$ python --version
Python 2.6.7
~$ cd bottle-test
bottle-test$ python hello.py 

Результат в браузере

person Nianliang    schedule 23.03.2012
comment
потрясающий лучший ответ, я не знал рамки для бутылок, так круто, так просто: D спасибо شكر لك - person ucefkh; 01.10.2013

просто добавь

# -*- coding: whatever-encoding-you-use -*-

вверху вашего файла

person JBernardo    schedule 09.09.2011
comment
вы, вероятно, используете UTF-8 (надеюсь). Так что пишите вместо whatever-encoding-you-use - person JBernardo; 10.09.2011
comment
Согласно документам, кодировка по умолчанию для Bottle — utf-8, и по умолчанию для моего редактора — utf-8. Вот что делает эту проблему такой странной для меня. - person qliq; 10.09.2011
comment
Однако это не вопрос Bottle, это вопрос компилятора Python (который первым получает доступ к файлу). Вам нужно сообщить компилятору, в какой кодировке находится ваш файл, иначе он будет считать, что это Latin-1. - person Nick Bastin; 10.09.2011

Сохраните файл как utf-8 и вставьте

#encoding: utf-8

как первая строка вашего файла

person rocksportrocker    schedule 09.09.2011
comment
SyntaxError: неверный синтаксис. Согласно документам, Utf-8 является кодировкой по умолчанию. - person qliq; 10.09.2011
comment
@qliq: Ваша проблема решена? Если да, вам, вероятно, следует принять один из ответов. Если нет, не могли бы вы уточнить, где вы получаете SyntaxError в комментарии? Возможно, предоставьте дополнительный фрагмент кода в самом вопросе. - person Helgi; 14.09.2011

В верхней части скрипта введите следующее:

# encoding: utf-8

Дело в том, что ваш скрипт может работать с кодировкой latin1 (ISO 8859-1), которая ограничена по сравнению с UTF-8.

person HexaGridBrain    schedule 09.09.2011
comment
Возможно, но когда вы запускаете сценарий, интерпретатор Python не знает, используете ли вы IDE или Gedit, которые используют UTF-8 при вводе кода. Когда вы запустите скрипт и он увидит, что он использует UTF-8, он установит его или будет использовать Latin1 по умолчанию (возможно, не для python3 и более, я не уверен) - person HexaGridBrain; 10.09.2011