Unicode Python Windows Consle

我有一个二十一点游戏的程序。 它没有完成,但我有一个Unicode的问题。 当它打印一个string时,它的格式不正确(Look Below)。 这是Python 3。

from unicurses import * import sys import time from random import choice as rc import random def total(hand): #total aces = hand.count(11) t = sum(hand) if t > 21 and aces > 0: while aces > 0 and t > 21: t -= 10 aces -= 1 return t def random(one,two): import random number = random.randint(one,two) return number def number(): number = random(1,13) if number == 13: value = '0' elif number == 12: value = '0' elif number == 11: value = '0' elif number == 10: value = '0' elif number < 10: value = number return value def card(): cardnumber = number() card = cardnumber return card def store10Cards(): tenCards = [card(), card(), card(), card(), card(), card(), card(), card(), card(), card()] return tenCards stdscr = initscr() cards = store10Cards() mvaddstr(10, 10, '┌──────────┐\n│{} │\n│ │\n│ │\n│ │\n│ │\n│ │\n│ │\n│ │\n│ {}│\n└──────────┘'.format(cards[0], cards[0]).encode('utf-8')) #deck = [] #deck of cards #cwin = 0 #computer wins #pwin = 0 #player wins #for i in range (2, 11): # for j in range ([24, 72][i == 10]): # deck.append(i) #stdscr = initscr() #Start the standard screen start_color() #Start the color service init_pair(1, COLOR_RED, 0) #color pair 1 is red text and no highlighting init_pair(2, COLOR_WHITE, 0) #color pair 2 is white text and no highlighting addstr('\n\n------------------------------------------------------------------------', color_pair(1) | A_BOLD) addstr('\n\n\nAre You Ready To Try And Defeat The Undefeated Blackjack Master?\n\n\nThe First One To Win 10 Hands Wins!!!\n\n\nAces Are Counted As 11s And Automaticlly Change To 1 If You Go Over 21. \n\n\nWinning 1 Hand Does Not Mean You Win The Game\n\n\nIt Is Possible To Win But Very Hard!!! Good Luck!!!\n\n\n', color_pair(2)) addstr('------------------------------------------------------------------------', color_pair(1) | A_BOLD) addstr('\n\nDo You Know The Rules Of Blackjack? (Y or N)\n\n', color_pair(2)) addstr('------------------------------------------------------------------------', color_pair(1) | A_BOLD) refresh() #refreshes cbreak() #lets user do Ctrl + C noecho() #Stops inputs from being shown a = getch() #Gets input while a == ord('q'): #Checks if input is q clear() #clears before exit exit() #quits while a == ord('n'): #Checks if input is n clear() #clears before displaying the next text addstr('\n\n\n----------------------------------------------------------------------------------', color_pair(1) | A_BOLD) addstr('\n\nOk. That Is Ok. The Rules Are As Follows: \n\nThe Goal Is To Get To 21.\n\nYou Can Hit A Card (Receive Another) Or Stand And See What The Dealer Has And Does.\n\nThe Person With The Higest Value 21 Or Below Wins That Hand.\n\nAces Start As 11s But Change Automatticly To 1s If You Go Over 21 To Save You.\n\nIf You Get 21 Exactly You Get A Blackjack.\n\nA Blackjack Means You Automaticly Win Unless The Computer Gets A 21 And Ties You.\n\nBe Careful Not To Hit Too Many Times Because If You Go Over 21 You Lose That Hand.\n\nAny Face Card Is Automaticly A 10 At All Times.\n', color_pair(2)) addstr('\n----------------------------------------------------------------------------------\n\n\n', color_pair(1) | A_BOLD) sleep(15) a = getch() #resets input variable while a == ord('q'): #Checks if input is q clear() #Clears before exit exit() #quits while a == ord('y'): #Checks if input is y clear() #clears before displaying the next text addstr('\n\n\n\n\n----------------------------------------------------------------------------------', color_pair(1) | A_BOLD) addstr('\n\n\n\nGreat!\n\n\n\nHave Fun!\n\n\n\nGood Luck!\n\n\n', color_pair(2)) addstr('----------------------------------------------------------------------------------\n\n\n', color_pair(1) | A_BOLD) refresh() time.sleep(1) b = '1' a = '' #resets input variable 

以下是我遇到的问题:

 mvaddstr(10, 10, '┌──────────┐\n│{} │\n│ │\n│ │\n│ │\n│ │\n│ │\n│ │\n│ │\n│ {}│\n└──────────┘'.format(cards[0], cards[0]).encode('utf-8')) 

我尝试使用UTF-8对其进行编码,并通过执行chcp将命令提示符设置为UTF-8,然后当我运行该string打印的程序时:

x94 x8 x8 x8 x80 xe2 x94 x80 xe2 x94 x80 xe2 x94 x80 xe2 x94 x80 xe2 x94 x80 x2 x94 x80 xe2 x94 x80 \ xe2 \ x94 \ x80 \ xe2 \ x94 \ x80 \ xe2 \ x94 \ x90 \ n \ xe2 \ x94 \ x823 \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ n \ x e2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x94 \ xe2 \ x94 \ x80 \ xe 2 \ x94 \ x80 \ xe2 \ x94 \ x80 \ xe2 \ x94 \ x80 \ x80 \ x80 \ xe2 \ x94 \ x80 \ xe2 \ x94 \ x80 \ xe2 \ x94 \ x80 \ xe2 \ x94 \ x80 \ xe2 \ x94 \ x80 \ xe2 \ x94 \ x98'

请帮我打印string应该是,而不是在unicode

如果您对我的代码有任何其他build议,请告诉我。

在Windows上,unicurses使用ctypes来包装PDCurses 。 此库可选地在项目站点上分布的32位DLL中使用Unicode支持构建。 仅供参考,Unicode版本调用控制台宽字符API(如WriteConsoleOutputW ,所以不要担心旧控制台代码页。 您需要使用UTF-8编码参数的“pdc34dllu.zip”版本。 因为预建的DLL只有32位,所以你必须使用32位的Python,除非你安装了Visual Studio 2015来建立一个64位的DLL。

您还必须对unicurses进行一些更改才能完成此项工作。 以下是我为遵循32位Python 3.5的工作而采取的步骤:

  1. 下载pdc34dllu.zip 。 将“pdcurses.dll”解压缩到Python的安装目录(即python.exe所在的位置)或PATH环境变量中的目录。
  2. 下载并解压缩UniCurses-1.2.zip 。
  3. 在安装之前,请对unicurses.py进行以下更改。 在第34 code = locale.getpreferredencoding()更改为code = 'utf-8' 。 接下来,注释掉第52-54行, if not os.access("pdcurses.dll",os.F_OK)因为如果“pdcurses.dll”不在工作目录中,检查总是失败。
  4. 运行python setup.py install软件包。

例如:打印一张卡片

 import unicurses card_template = '\n'.join([ '┌────────────┐', '│{card} │', '│ │', '│ │', '│ │', '│ │', '│ │', '│ │', '│ │', '│ {card}│', '└────────────┘']) def main(): stdscr = unicurses.initscr() unicurses.clear() card_string = card_template.format(card=5) for i, line in enumerate(card_string.splitlines()): unicurses.mvaddstr(5 + i, 5, line) unicurses.refresh() unicurses.endwin() if __name__ == '__main__': main() 

产量

  ┌────────────┐ │5 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 5│ └────────────┘