Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ошибка #214

Closed
skaa opened this issue Apr 19, 2017 · 10 comments
Closed

Ошибка #214

skaa opened this issue Apr 19, 2017 · 10 comments
Assignees
Labels

Comments

@skaa
Copy link

skaa commented Apr 19, 2017

При открытии http://localhost:6687/ в консоли ошибки:

UnicodeEncodeError('latin-1', 'Натали-ПК', 0, 6, 'ordinal not in range(256)')
Traceback (most recent call last):
  File "C:\Program Files (x86)\Monitorrent\env\lib\site-packages\cheroot\server.py", line 966, in communicate
    req.respond()
  File "C:\Program Files (x86)\Monitorrent\env\lib\site-packages\cheroot\server.py", line 796, in respond
    self.send_headers()
  File "C:\Program Files (x86)\Monitorrent\env\lib\site-packages\cheroot\server.py", line 910, in send_headers
    self.server.server_name.encode('ISO-8859-1'),
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-5: ordinal not in range(256)

видимо дело в том, что компьютер с виндой имеет сетевое имя Натали-ПК. Кстати этот текст повторяется несколько раз, хотя запрос из браузера выполнялся только один.

@skaa skaa changed the title Frontend error Ошибка Apr 19, 2017
@byg0n3
Copy link

byg0n3 commented Apr 19, 2017

Классика проблем с кодировкой и виндовая реализация cp1251. По факту - проблема в сторонней либе (и, кстати, так и не понятно, зачем они насильно пытаются это делать, если браузеры нынче могут в нормальный диапазон символов).

В качестве локального решения может помочь изменение hostname на что-нибудь в латинском исполнении (Natali-PC).

По коду - https://github.com/werwolfby/monitorrent/blob/develop/server.py#L188 и падает на https://github.com/cherrypy/cheroot/blob/master/cheroot/server.py#L884

@werwolfby werwolfby added the bug label Apr 19, 2017
@werwolfby werwolfby self-assigned this Apr 19, 2017
@werwolfby
Copy link
Owner

Из rfc:

By default, message header field parameters in Hypertext Transfer
Protocol (HTTP) messages cannot carry characters outside the ISO-
8859-1 character set. RFC 2231 defines an encoding mechanism for use

Так что похоже что логично :(. Надо наверное будет захардкодать имя сервера.

@byg0n3
Copy link

byg0n3 commented Apr 19, 2017

Это стандартная рекомендация для совместимости с RFC 2231.
Раздел 3.2 особенно подчеркивает, что это не является обязательным требованием:

However, RFC 2231 does not specify a mandatory-to-implement character
set, making it hard for senders to decide which character set to use.
Thus, recipients implementing this specification MUST support the
character sets "ISO-8859-1" [ISO-8859-1] and "UTF-8" [RFC3629].

В придачу, w3 также не настаивает на использовании "ISO-8859-1".

Я бы завел тикет в cheroot для начала и спросил о возможности использования дефолтного utf-8. За спрос не бьют, как говорится.

@werwolfby
Copy link
Owner

Согласен, спасибо

@webknjaz
Copy link

webknjaz commented May 5, 2017

@werwolfby
I've raised this question @ cherrypy/cheroot#27

@werwolfby
Copy link
Owner

@webknjaz thanks a lot!

@webknjaz
Copy link

@werwolfby while I'm not sure about the way we'd fix this in cheroot, I suggest you specifying the server name explicitly in this call as a workaround.

It would look smth like:

server = wsgi.Server(server_start_params, app, server_name='Monitorrent Server/v100500')

@webknjaz
Copy link

@werwolfby otherwise upgrade cheroot to v5.7.0, It's got normal string set by default now.

@werwolfby
Copy link
Owner

Cool, will do it.

@werwolfby
Copy link
Owner

@webknjaz cause we've already updated to 6+ version of cheroot, I close the issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants