Python: как изменить unicode на str [duplicate]

Обновление:

Уже есть запрос на изгиб для этого 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';
  }
}

Forked stackblitz

2) или проблема с сообщением в github

3) или использовать композицию вместо наследования, как было предложено в комментариях.

411
задан jfs 22 March 2016 в 18:05
поделиться

7 ответов

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'
508
ответ дан Sorantis 25 August 2018 в 16:52
поделиться

Вот пример:

>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'
50
ответ дан Bastien Léonard 25 August 2018 в 16:52
поделиться

Вот пример кода

import unicodedata    
raw_text = u"here $%6757 dfgdfg"
convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore')
2
ответ дан Gihan Chathuranga 25 August 2018 в 16:52
поделиться

Хорошо, если вы готовы / готовы перейти на 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, тогда проблема вероятно, что-то связано с тем, как вы пытаетесь сохранить текст в файл.)

3
ответ дан JAB 25 August 2018 в 16:52
поделиться
>>> text=u'abcd'
>>> str(text)
'abcd'

Если строка содержит только символы ascii.

101
ответ дан Mauricio 25 August 2018 в 16:52
поделиться

Если у вас есть строка 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) для файлов, открытых в текстовом режиме.

274
ответ дан Peter Mortensen 25 August 2018 в 16:52
поделиться
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars
-1
ответ дан Suraj Rao 25 August 2018 в 16:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: