专用Unicode字符在Python 3解释器中的显示方式不同

专用Unicode字符在Python 3解释器中的显示方式不同,python,windows,unicode,python-3.4,python-idle,Python,Windows,Unicode,Python 3.4,Python Idle,因此,我在Windows10上使用专用字符编辑器私自创建了一个unicode字符。该字符与代码E000一起保存。我从字符映射中复制了它,并粘贴到文本编辑器中,它成功了。但是,当我将其粘贴到Python空闲编辑器中时,它会更改为不同的unicode字符,甚至在运行程序之前。我不能使用u'unicode\u string'或类似的东西,因为我的unicode字符在解释器中甚至不起作用。我是编程新手 我的问题是,如何在Python 3.4中使用我的专用unicode字符 这是我在记事本上看到的 是我在

因此,我在Windows10上使用专用字符编辑器私自创建了一个unicode字符。该字符与代码
E000
一起保存。我从字符映射中复制了它,并粘贴到文本编辑器中,它成功了。但是,当我将其粘贴到Python空闲编辑器中时,它会更改为不同的unicode字符,甚至在运行程序之前。我不能使用
u'unicode\u string'
或类似的东西,因为我的unicode字符在解释器中甚至不起作用。我是编程新手

我的问题是,如何在Python 3.4中使用我的专用unicode字符

这是我在记事本上看到的


是我在Python 3.4解释器上看到的。您可以在Python源代码中使用
\u
转义序列,如下所示:

my_unicode_string = 'This is my Unicode character: \ue000'
print(my_unicode_string)

Python并不是真正有趣的部分,而是shell或终端。在我们的例子中,Windows使用特殊的代码点来表示私有字符编码。要获得这些,您需要在Windows中获取shell中角色的十六进制转储,然后可以在Python中呈现角色

注意:使用Unicode点
E021
更高的,因为数字较低的代码点通常用于控制,而且python解释器和空闲使用的Windows shell似乎不允许您使用私有字符覆盖这些点

示范 我通过生成自己的私人角色来测试您的问题。我将把我的测试的一个图像放在这里,因为它不会在堆栈溢出的文本中正确呈现

解释 我在Windows10中使用了
字符映射
程序来复制符号并将其粘贴到python环境中。环境可能会在右侧截断它,因为它是一个宽字符,而环境似乎不喜欢它。(我移动光标以使其呈现全宽。)

然后,我继续使用默认的utf-8编码对字符进行编码,从而获得代码点的hextump,该编码作为对象被证明是
\xee\x80\xa1

接下来,我将数据打印为字符串,向您显示一个常见错误,以及如果您试图打印这些字节的字符串,将打印什么


然后,我打印了
b'\xee\x80\xa1'
,这就是您在软件中实际使用符号的方式。

它可以打印unicode字符,但不会打印我创建的unicode字符。相反,它打印一个随机的unicode字符。我会将一些截图附加到我的question@Arbiter当前位置那是另一个问题,值得单独提问。如果输出控制台无法显示字符,则必须设置输出控制台以使用正确的字体。这与此问题无关。@llnspectable不仅如此,在我运行程序之前,Python编辑器会将我的字符替换为另一个随机unicode字符。请参阅我的附加图像以获得澄清。您可以在
notepad
my private unicode字符上看到,但在Python中(编辑器和输出控制台)显示的是完全不同的unicode字符。当我从
notepad
粘贴我的PUC时,这个新字符会立即出现。如果它不应该出现,它应该与我最初复制的字符完全相同。您可能在空闲Python编辑器中没有正确的字体,或者该角色使用的字体与您期望的不同。@nneonneo根据我的角色映射,我使用的是一种称为“所有字体”(专用字符)的字体。如何更改IDLE Python编辑器字体?您是否可以尝试从命令行Python解释器打印字符,而不是使用IDLE?旁白:这是我不使用或不建议使用IDLE的另一个原因。CPython对Windows控制台的使用在3.6中得到了极大改进,以更好地处理非ascii字符。如果要在控制台上打印通用unicode字符,请获取3.6。IDLE的字符显示通过tk。Tk仅限于基本的多语言平面(计划在2017年更改),但在3.6之前,Tk和IDLE显示的unicode比Windows控制台要好得多。我的专用unicode字符(PUC)可以在文本编辑器(如
notepad
)上工作,也可以在
cmd
上工作。除了不能在Python解释器中工作外,它也不能在Python编辑器中工作。例如,如果我将我的PUC从
cmd
notepad
复制并经过Pythons编辑器,则会显示一个新的unicode字符,而不是我想要使用的PUC。@Arbiter,我做了一个测试,测试的最后一行是我在python中如何使用该字符。您应该能够按照相同的步骤获取特殊角色的代码点。这是可行的,但您说您从Windows 10中的角色映射复制并粘贴了角色?我试过了,但是当我将角色从角色映射粘贴到编辑器中时(这样我就可以将它指定给char并对其进行编码),角色看起来完全不同。然后我尝试了你剩下的代码,但对这个新角色有效,而不是我最初创建的角色。为什么当我从字符映射粘贴PUC时,Python会自动将其替换为随机的unicode字符?@Arbiter我更新了我的答案,使其更加清晰,我实际上使用了IDLE,因为您使用了IDLE。在字符映射中,请确保单击“选择并复制”,然后将其粘贴到终端中。此外,如果在打开shell后更改或添加了角色,则该特定终端可能无法渲染该角色。关闭并重新打开IDLE可能会解决这个问题。PUA字符的低范围会有不同的符号,因为您已经有了一种字体,可以为这些字符定义字形,并且不同字体之间的回退会因应用程序而异。(t中出现的字体