Обновление:
Уже есть запрос на изгиб для этого https://github.com/angular/angular/pull/25033
Оригинал версия
Проблема: кажется, что новые угловые treeshakable-сервисы не учитывают наследование:
Первый угловой определяет (1) ngInjectableDef
в функции AppService
. Затем вы наследуете ChilAppService
из AppService
, чтобы дочерний класс содержал все свойства родительского класса. И наконец, когда угловой пытается определить свойство (2) ngInjectableDef
на ChildAppService
, это невозможно, потому что он уже существует (3) благодаря прототипному наследованию javascript.
Чтобы исправить это, вы можете либо
1) обходным путем путем определения неопределенного свойства ngInjectableDef
в дочернем сервисе, чтобы он не читал уже заполненный из свойства родительского класса и угловой сможет определить ngInjectableDef
для дочернего класса:
@Injectable({
providedIn: 'root'
})
export class ChildAppService extends AppService {
static ngInjectableDef = undefined;
constructor() {
super();
this.name = 'CHILD SERVICE';
}
}
2) или проблема с сообщением в github
3) или использовать композицию вместо наследования, как было предложено в комментариях.
title = u"Klüft skräms inför på fédéral électoral große"
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'Kluft skrams infor pa federal electoral groe'
Вот пример:
>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'
Вот пример кода
import unicodedata
raw_text = u"here $%6757 dfgdfg"
convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore')
Хорошо, если вы готовы / готовы перейти на Python 3 (что может быть не из-за обратной совместимости с кодом Python 2), вам не нужно делать какие-либо преобразования; весь текст в Python 3 представлен строками Unicode, что также означает, что больше не используется синтаксис u'<text>'
. У вас также есть то, что является, по сути, строками байтов, которые используются для представления данных (которые могут быть закодированной строкой).
http://docs.python.org/3.1/ Whatsnew / 3.0.html # text-vs-data-вместо-unicode-vs-8-bit
(Конечно, если вы используете Python 3, тогда проблема вероятно, что-то связано с тем, как вы пытаетесь сохранить текст в файл.)
>>> text=u'abcd'
>>> str(text)
'abcd'
Если строка содержит только символы ascii.
Если у вас есть строка Unicode, и вы хотите записать ее в файл или в другую сериализованную форму, вы должны сначала закодировать в конкретное представление, которое можно сохранить. Существует несколько общих кодировок Unicode, таких как UTF-16 (для большинства символов Unicode используются два байта) или UTF-8 (1-4 байта / код в зависимости от символа) и т. Д. Чтобы преобразовать эту строку в конкретную кодировку, вы может использовать:
>>> s= u'£10'
>>> s.encode('utf8')
'\xc2\x9c10'
>>> s.encode('utf16')
'\xff\xfe\x9c\x001\x000\x00'
Эта необработанная строка байтов может быть записана в файл. Обратите внимание, что при чтении его вы должны знать, в какой кодировке он находится и декодировать его, используя ту же самую кодировку.
При записи в файлы вы можете избавиться от этого ручного процесса кодирования / декодирования, используя модуль кодеков . Итак, чтобы открыть файл, который кодирует все строки Unicode в UTF-8 , используйте:
import codecs
f = codecs.open('path/to/file.txt','w','utf8')
f.write(my_unicode_string) # Stored on disk as UTF-8
Обратите внимание, что что-либо еще, использующее эти файлы, должно понимать, что кодирует файл находится, если они хотят их прочитать. Если вы единственный, кто делает чтение / запись, это не проблема, иначе удостоверьтесь, что вы пишете в форме, понятной любым другим, использующим файлы.
В Python 3 эта форма файла доступ по умолчанию, а встроенная функция open
будет принимать параметр кодировки и всегда переводить в / из строк Unicode (стандартный строковый объект в Python 3) для файлов, открытых в текстовом режиме.
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars