Вот несколько фундаментальных фактов, которые вы должны понять, чтобы прояснить ситуацию:
this
эквивалентно module.exports
. Это пустой объект, который вы видите. this
внутри функции, значение this
определяется заново перед каждым исполнением функции, и его значение определяется тем, как выполняется функция . Это означает, что два вызова одного и того же функционального объекта могут иметь разные значения this
, если механизмы вызова различны (например, aFunction()
против aFunction.call(newThis)
против emitter.addEventListener("someEvent", aFunction);
и т. Д.). В вашем случае aFunction()
в нестрогом режиме запускается функция с this
, установленная для глобального объекта. require
d как модули узла, движок узла запускает код модуля внутри функции обертки. Эта функция обматывания модуля вызывается с this
, установленным на module.exports
. (Вспомните выше, функция может быть запущена со значением this
.) Таким образом, вы получаете разные значения this
, потому что каждый this
находится внутри другой функции: первая находится внутри созданной Узлом модуля-обертки, а вторая находится внутри aFunction
.
Ну, вот вы:
Положите # -*- coding: utf-8 -*-
в начало файла, он определит кодировку.
docs говорит:
Python по умолчанию будет использовать ASCII в качестве стандартной кодировки, если не указаны другие подсказки кодирования.
blockquote>To define a source code encoding, a magic comment must be placed into the source files either as first or second line in the file, such as:
Итак, вы должны начать код:
# -*- coding: utf-8 -*- from django.shortcuts import render from django.http import HttpResponse from django.template.loader import get_template ...
Надежда помогает
Если вы читаете PEP 263 , он четко говорит:
Чтобы определить кодировку исходного кода, магический комментарий должен быть помещен в исходные файлы либо как первый или вторая строка в файле ...
blockquote>(Исходное предложение сказало, что оно должно быть первой строкой после # !, если оно есть, но, по-видимому, оказалось, что было проще реализовать с правило «первая или вторая строка».)
Фактические справочные документы описывают одно и то же, менее дружественным, но более строгим способом, для 3.3 и 2.7 .
«Магический комментарий», который появляется позже в файле, не является волшебным, это просто комментарий, который вводит вас в заблуждение, не затрагивая компилятор Python.
UTF-8 для
u'哈哈'
-'\xe5\x93\x88\xe5\x93\x88'
, поэтому это байты в файле. В последних версиях Python (включая 2.7 и все 3.x) кодировка по умолчанию всегда ASCII, если файл не начинается с спецификации UTF (как это делают некоторые редакторы Microsoft); даже в 2.3-2.6 это обычно ASCII; в более ранних версиях это латинский-1. Пытаться интерпретировать'\xe5\x93\x88\xe5\x93\x88'
не удастся с точным исключением, которое вы видели.