我该如何在Python中打印欧元符号(€)?

17

我正在使用命令行解释器(Windows版v3.5)自学Python。

我想做的就是输出一些文本,其中包括欧元符号(€),我了解它的代码是80h(128十进制)。

#!
# -*- coding: utf-8 -*-

mytext = 'Please pay \x8035.'
print(mytext)

它在最后一行崩溃了。
UnicodeEncodeError: 'charmap' codec can't encode character '\x80' in position 11: character maps to <undefined>

我已经进行了大量的谷歌搜索(关于编码等),并且对为什么打印命令失败有了一个大致的想法。通过调整上面的代码,可以发现 ASCII 码直到 \x7f 都能正常工作,这是人们所期望的。

但是我无法弄清楚如何显示 ,而且我发现关于编码的信息令人不知所措和难以理解。(请记住我只是一个新手!)

  • 我尝试在文本字符串前加上 u,以便首先创建一个 Unicode 字符串。
  • 我尝试创建一个中间对象 outputtext = mytext.encode('utf-8'),但是使用 print 输出此字符串会将其扩展为更加神秘的形式:b'Please pay \xc2\x8035.'
  • 我尝试查找另一种函数来代替 print 输出此中间字符串,但迄今为止没有任何效果。

请问是否有人可以向我展示一些代码,以便我可以学习并从中逆推。谢谢!

6个回答

14
你可以使用Unicode字符名称。 \N{name}是打印Unicode字符符号的好方法。 这里是一个示例运行...。
>>> print "Please pay %s"%(u"\N{euro sign}")
Please pay €
>>> print "Please pay %s"%(u"\N{dollar sign}")
Please pay $
>>> print "Please pay %s"%(u"\N{rupee sign}")
Please pay ₨
>>> print "Please pay %s"%(u"\N{pound sign}")
Please pay £

9

以下是在Python 3.x中打印带欧元符号的字符串的四种方法,按照难度递增的顺序排列。

1. 直接输入

使用键盘输入符号,或从其他地方复制并粘贴:

mytext = "Please pay €35."
print(mytext)

2. 使用Unicode字符编号

查找Unicode字符编号,例如在非常有用的页面http://www.fileformat.info/info/unicode/中,使用该代码在您的字符串中:

mytext = "Please pay \u20ac35."
print(mytext)

3. 使用字形名称

您可以使用unicodedata模块中的lookup()函数通过名称访问Unicode字形。同样,http://www.fileformat.info/info/unicode/可以帮助您查找字形名称:

import unicodedata

mytext = "Please pay {}35.".format(unicodedata.lookup("EURO SIGN"))
print(mytext)

4. 使用Windows-1252代码页

如果你真的想使用\x80字节码,你可以这样做,因为它在Windows-1252代码页中代表欧元符号。你需要做的是先创建一个包含该字节码的字节字符串,然后解码该字节字符串,以便将该字节码转换为Windows-1252代码页中欧元符号的条目:

mytext = b"Please pay \x8035.".decode("windows-1252")
print(mytext)

4
你可以使用这个:
mytext = 'Please pay \u20ac.'
print(mytext)

基于 Unicode字符“欧元符号”
但是,如果该字符可以在脚本的字符编码中表示,则没有理由不写:
mytext = 'Please pay €.'

3
欧元在 windows-1252 字符集中的编码是 80h0x80),你需要告诉 Python:
# -*- coding: utf-8 -*-

mytext = b'Please pay \x8035.'.decode('windows-1252')
print(mytext)

你也可以直接在源代码中写入真实的欧元符号,或者使用其表示法,正如其他人所说,使用正确的编码(utf-8):

# -*- coding: utf-8 -*-

mytext = u'Please pay \u20ac35.'
print(mytext)

... or ...

# -*- coding: utf-8 -*-

mytext = 'Please pay €35.'
print(mytext)

这段代码同时适用于Python 2和3。


2

来自http://www.python-forum.org/viewtopic.php?f=6&t=13995

这是Python 2的行为,Python 3不会这样做。

Python 2.7:

>>> s = "€"
>>> s
'\xe2\x82\xac'
>>> print s
€
>>> s = u"€"
>>> s
u'\u20ac'
>>> print s
€
>>> print('\xe2\x82\xac'.decode('utf8'))
€

Python 3.4

>>> s = '€'
>>> s
'€'
>>> print(s)
€
>>> 
>>> print(repr(s))
'€'

0
在Python 3中,您可以直接将€字符复制粘贴到UTF-8编码的文本文件中(无需使用代码):
mytext = 'Please pay €.'
print(mytext)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接