为什么在psychopy.visual.TextStim中不能包含“£”符号?

时间:2018-07-24 13:58:29

标签: python python-2.7 psychopy

我目前正在尝试使用python 2.7.15和Psychopy 1.90.2打印文本刺激。不幸的是,“£”符号导致visual.TextStim的初始化引发错误:

money = 2
text_to_print = "£" + str(money)
bonus = visual.TextStim(win, text=text_to_print, pos=[0.7,-0.35], height=TEXT_STIM_HEIGHT, font="Arial", bold=True)
bonus.setColor('GoldenRod')
bonus.wrapWidth=1

该错误显示为:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)

我想知道如何在文字刺激开始时加入“£”符号。谢谢。

2 个答案:

答案 0 :(得分:4)

该错误是明确的。 "£"不是ASCII字符。它是Unicode字符U + 00A3。由于错误表明无法对字节0xc2进行解码,因此我假设您的源是utf8编码的(当utf-8编码时,"£"读为b'\xc2\xa3')。

不确定,因为我没有python 2.7.15和Psychopy 1.90.2系统,但我会尝试在此处传递unicode字符串:

bonus = visual.TextStim(win, text=text_to_print.decode('utf-8'), pos=[0.7,-0.35],
                        height=TEXT_STIM_HEIGHT, font="Arial", bold=True)

答案 1 :(得分:1)

使用u(用于“ unicode”)为非ASCII字符加上前缀:

text_to_print = u"£" + str(money)

当一个字符为unicode时,其他字符也将为Unicode,就像您添加整数和浮点数一样-选择了更全面的数据类型。上面的代码比冗长的代码更简单:

text_to_print = "£" + str(money)  # Non-unicode; older libraries will go ahead and make it ascii
text_to_print.decode('utf-8')  # Use this. Libraries respect this (except the csv module)

从python3起(包括PsychoPy3),默认情况下所有内容均为unicode,因此“特殊”字符在PsychoPy中不会造成问题。