如何在Windows控制台中显示各种语言的本地口音?

3
print "Español\nPortuguês\nItaliano".encode('utf-8')

错误:

追溯(最近的调用): 文件 "", 行 1, in print "Español\nPortuguês\nItaliano".encode('utf-8') UnicodeDecodeError: 'ascii' codec can't decode byte 0xf1 in position 4: ordinal not in range(128)

我正在尝试在Windows上制作一个多语言控制台程序。这是可能的吗? 我已经将文件保存为UTF-8编码,但仍然出现相同的错误。

*编辑 我只是在这个程序中输出文本。我改变了Lucida字体,但仍然出现以下问题: alt text http://img826.imageshack.us/img826/7312/foreignlangwindowsconso.png

我只是在寻找一种便携式方法,在Windows控制台中正确显示外语。如果它可以跨平台执行,那就更好了。我认为UTF-8是答案,但你们所有人都告诉我字体等也起到了作用。那么,有没有一个明确的答案呢?


好的,我打开了cmd.exe然后输入chcp 65001。这样“代码页”就被更改了。现在这段代码将会正确地显示如下内容:print u"Español\nPortuguês\nItaliano",前提是.py文件在编辑器中已经编码为utf-8。现在我必须找到一种通过Python自动设置这个代码页的方法...... - chazzycheese
这是如何在Python 3上实现的方法 - jfs
3个回答

3

简短回答:

# -*- coding: utf-8 -*-
print u"Español\nPortuguês\nItaliano".encode('utf-8')

第一行代码告诉Python你的文件编码为UTF-8(你的编辑器也必须使用相同的设置),这一行代码应该放在文件的开头。
另一个需要注意的问题是,Python 2 包含两种不同的“basestring”对象 - “str” 和“unicode”。使用“u”前缀可以创建一个unicode对象而不是默认的str对象,你可以将其编码为UTF-8(但是直接打印unicode对象也应该有效)。

我正在使用Windows 7,在“属性”->“字体”中,我只有Consolas、Lucida和Raster字体。但是,它们都无法正确显示我的内容,我只能看到一些奇怪的符号。 - chazzycheese
也许这个链接可以帮到你:http://blog.i18n.ro/using-unicode-console-output-with-python/ - tux21b

2

首先,在Python 2.x中,你不能对包含非ASCII字符的str进行encode操作。你需要写成以下形式:

print u"Español\nPortuguês\nItaliano".encode('utf-8')

在Windows控制台中使用UTF-8很困难。

  • 您必须将命令提示符字体设置为Unicode字体(默认情况下唯一可用的是Lucida Console),否则您仍会得到IBM437编码。
  • chcp 65001
  • 修改encodings._aliases,将"cp65001"视为UTF-8的别名。

即使这样,它似乎也无法正常工作。


1
这对我有效:
# coding=utf-8
print "Español\nPortuguês\nItaliano"

你可能想尝试使用 chcp 65001 && your_program.py 运行它。此外,尝试将命令提示符字体更改为 Lucida Console。


这只有在您的控制台设置为 utf-8 时才能“工作”。在输出时使用 unicode 和编码是一种更加健壮的解决方案。 - habnabit

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