<p>对于部分问题,请使用:</p>
<pre><code>words_text = codecs.open(filename, 'r', 'utf-8-sig')
</code></pre>
<p>它将处理\ufeff的字节顺序标记。在</p>
<p>从技术上讲,这:</p>
^{pr2}$
<p>应该是:</p>
<pre><code>user_reply = raw_input('%s: ' % (gr_en_dict[key])).decode(sys.stdin.encoding)
</code></pre>
<p>但实际上它们应该是相同的编码。在</p>
<p>我认为问题是默认控制台中的编码不支持所有希腊字符。当我切换到希腊代码页时,事情开始好转。请注意,我可以将正确的字符粘贴到下面的<code>print</code>语句中,但cp437实际上并不支持所有字符,因此在打印时,不支持的字符将替换为问号:</p>
<pre><code>C:\>chcp
Active code page: 437
C:\>python
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout.encoding
'cp437'
>>> print 'η αγελάδα - cow'
? α?ε??δα - cow
</code></pre>
<p>如果我切换到希腊代码页(869或1253),它可以工作:</p>
<pre><code>C:\>chcp 869
Active code page: 869
C:\>python
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout.encoding
'cp869'
>>> print 'η αγελάδα - cow'
η αγελάδα - cow
>>>
</code></pre>