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

Why can I not include a "£" symbol in my psychopy.visual.TextStim?

我目前正在尝试使用 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)

我想知道如何在文本刺激的开头加入“£”符号。谢谢。

错误很明显。 "£" 不是 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)

u 作为非 ascii 字符的前缀(对于 "unicode")所以:

text_to_print = u"£" + str(money)

当一个字符是 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,因此 "special" 个字符在 PsychoPy 中应该不会造成问题。