2015-01-03 2 views
1

Небольшой вопрос от новичка. Я пытаюсь сделать небольшую функцию, где он рандомизирует содержимое текста.Неподдерживаемые символы на входе (Python 2.7.9)

#-*- coding: utf-8 -*- 
import random 

def glitch(text): 
    new_text = [''] 
    for x in text: 
     new_text.append(x) 
     random.shuffle(new_text) 
    return ''.join(new_text) 

Как вы можете видеть, что это довольно просто, и выход, при вводе простой строки, такие как: "Эй, как ты? приведет к рандомизированному предложению, как прогнозировалось. Однако, когда я пытаюсь вставить что-то похожее на это:

печати глюк ('IAAI † N $ § & 0ñŒ≥Q¶μù`o ¢ у»-œº')

. ..Python 2.7.9 возвращает «Неподдерживаемые символы во входном файле» - Я просмотрел форум и, насколько я понял, пробовал вещи, поскольку я все еще новичок в кодировании в целом, но безрезультатно ,

Любые советы?

Спасибо.

+0

Работает отлично для меня в 2.7.5, будь то печать из сценария или после импорта на консоль. – Air

+0

Возможно ли, что мне не хватает некоторых настроек или, возможно, необходимо загрузить некоторые пакеты, чтобы иметь возможность использовать такой ввод? Я нахожусь в Mac OSX 10.10.1. Я несколько раз пытался изменить в настройках три варианта (locale, utf-8, none), но ничего не работает. –

ответ

0
#-*- coding: utf-8 -*- 
import random 

def glitch(text): 

    new_text = [''] 
    for x in text: 
     new_text.append(x) 
     random.shuffle(new_text) 
    return ''.join(new_text) 

print (glitch(u'Iàäï†n$§&0ñŒ≥Q¶µù`o¢y”—œº')) 

Это должно работать, через быстрый поиск Google моего собственного, я узнал, вы должны предварять букву «U», чтобы отметить следующий текст в Юникоде.

Источник: Unsupported characters in input

+0

Почему downvote? – Dinar

+0

Спасибо, но похоже, что у infront нет никакой разницы. –

+0

Странно, мне кажется, это работает. – Dinar

-1

Ваш вопрос Python 2.x - не ваша конкретная версия Python 2. Python 2.x использует ascii вместо кодировки Unicode (изменено в Python 3), и ваша строка (likley), кодированный как utf-8. Смотрите следующее:

import chardet 
text = 'Iàäï†n$§&0ñŒ≥Q¶µù`o¢y”—œº' 
print chardet.detect(text)['encoding'] # prints utf-8 

Если вы загружаете Python 3.X, ваша проблема, вероятно, будет решена, since UTF-8 can handle any Unicode code point.

Если вам интересно - или для будущих пользователей 2.x - вы можете сделать следующее.

def glitch(text): 
    new_text = [] 
    for x in text: 
     new_text.append(x) 
    random.shuffle(new_text) #note you should just shuffle once - not every iteration. 
    new_line = ''.join(new_text) # this line is where your encoding moves from `utf-8` to `ascii` 
    # this becomes `ascii` because of the empty string you use to join your list. it defaults to `ascii` 
    # if you tried to make it `unicode` by doing `u''.join(list)` you would get a `UnicodeDecodeError` 
    return new_line.decode("ascii", "ignore").encode("utf-8") # note the [ignore][2]. it bypasses encoding errors. 
    # now your code will run and return a string of utf-8 characters 
    # (to which we encode new_line, and which is the default encoding of a string anytime you `decode()` it.) 
    # note that you will return a shorter string, because (again) `ascii` can only represent 
    # 128 characters by default, whereas some of your `utf-8` string is represented by 
    # characters b/w 129 & 255. 

Я надеюсь, что это поможет и имеет смысл. Есть много материалов, которые онлайн обсуждают эту проблему (в том числе несколько моих собственных вопросов - for example :))

+0

'print chardet.detect (text) ['encoding']' показывает «UTF-8», потому что ваша текстовая строка сохраняется и кодируется как UTF-8. Я могу сделать это show 'windows-1252', если я буду кодировать файл по-другому. –

+0

Редкое отклонение от меня, так как ваш ответ слишком вводит в заблуждение другим пользователям. Python 2.x так же способен поддерживать Unicode. Ваш метод 'glitch()' содержит многочисленные ошибки, которые не позволяют пользователям правильно понимать поддержку Unicode –