2013-03-06 6 views
1

Это должно быть что-то очень простое, но я не могу найти ответ на форуме в любом месте. Вот основная проблема:Аннотирование рисунка с использованием String со странными символами

У меня есть набор CSV файлов вида:

"X, Temp ° C \ n1,25 \ п ..."

Обратите внимание на символ степени, то станет сердцем моей проблемы. Я использую NumPy и Matplotlib и импортировать этот файл, используя:

GT_kwargs = dict(delimiter=',',names=True) 
data_array = numpy.genfromtxt(filenm, **GT_kwargs) 

Это правильно производит Numpy массив с dtypes:

[('X', '<f8'), ('Temp_\xb0C', '<f8')] 

До сих пор так хорошо. Участки данных просто отлично, проблема возникает, когда я хочу, чтобы аннотировать кривые, используя имена вытащили из заголовка, в частности, если я стараюсь передать:

pyplot.annotate(data_array.dtype.names[1], xy=(1,1)) 

Это бросает:

ValueError: дисплей Matplotlib текст должен иметь все коды < 128 или использовать строки Unicode

Очевидно, проблема заключается в \ xb0C как знак степени. Я попытался заменить символ на строку unicode, но это ничего не делает. Как изменить эту строку, чтобы включить аннотацию в символ степени?

EDIT: Я немного сузил свой вопрос. Как я могу указать кодировку строки? Это действительно основной вопрос, но я все еще не могу найти ответ (что часто бывает так). Полезной будет ссылка на хорошую документацию.

+0

как вы пытались сделать строку unicode? – tacaswell

+0

Часть проблемы в том, что я новичок в использовании юникода. Мне сложно преобразовать строку в unicode. Я пробовал кучу немых вещей, таких как unicode (string), которые все бросают: UnicodeDecodeError: кодек ascii не может декодировать байт 0xb0 в позиции 3: порядковый номер не в диапазоне (128) –

+0

Вещи, которые я пытался конвертировать эта строка (некоторые являются глупыми): 'code'string = "T \ xb0C", tmp = unicode (string), tmp = unicode (string, encoding = "utf-8"), tmp = unicode (строка, кодировка = "utf-16"), tmp = unicode (string, encoding = "utf-32") –

ответ

1

\xb0 is malformed utf-8, в чем проблема. Замена \xb0 на \xc2\xb0 позволяет utf-8 правильно кодировать строку.

Смежные вопросы