簡體   English   中英

在 Windows 上設置 Python 終端編碼

[英]Set Python terminal encoding on Windows

我碰巧在 Windows 上的 Python 終端中設置字符編碼失敗。 根據官方指南,這是小菜一碟:

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

好的,現在測試:

print 'Русский'

生產一塊mojibake。 做錯了什么?

PS IDE 是 Visual Studio 2010,如果重要的話

您應該使用 unicode:

print u'Русский'

或切換到 python3(默認為 unicode)。

它會產生 mojibake,因為''是 Python 2 中的字節字符串文字(除非使用from __future__ import unicode_literals )。 您正在將 utf-8 字節(源代碼編碼)打印到使用其他字符編碼的 Windows 控制台(如果您看到 mojibake,則編碼不同):

>>> print(u'Русский'.encode('utf-8').decode('cp866'))
╨а╤Г╤Б╤Б╨║╨╕╨╣

解決方案是按照@JBernardo 的建議打印 Unicode :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print(u'Русский')

如果控制台編碼支持西里爾字母,例如它是cp866 ,它就可以工作。

如果要將 output 重定向到文件; 您可以使用PYTHONIOENCODING環境變量來設置 Python 用於 I/O 的字符編碼:

Z:\> set PYTHONIOENCODING=utf-8
Z:\> python your_script.py > output.utf-8.txt

如果要打印無法使用控制台編碼OEM 代碼頁)表示的 Unicode 字符,則可以安裝win-unicode-console Python ZEFE90A8E604A7C6B78D03A67

Z:\> py -m pip install win_unicode_console
Z:\> py -m run your_script.py

更新:請參閱JF Sebastian 的答案以獲得更好的解釋和更好的解決方案。

# -*- coding: utf-8 -*-設置源文件的編碼,而不是 output 編碼。

您必須在使用與終端使用的完全相同的編碼打印之前對字符串進行編碼。 在您的情況下,我猜您的代碼頁是西里爾文(cp866)。 所以,

print 'Русский'.encode("cp866")

如果其他人在搜索時獲得此頁面,最簡單的方法是設置 windows 終端代碼頁

CHCP 65001

或電源 shell 啟動它

powershell.exe -NoExit /c "chcp.com 65001"

Is there a Windows command shell that will display Unicode characters?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM