On 03/08/2014 23:52, Wiktor wrote:
Hi, as OO programming exercise, I'm trying to port to Python one of my favorite game from early'90 (Atari 65XL/XE) - Kolony (here's video from original version on C64 https://www.youtube.com/watch?v=UFycYOp2cbE, and here's video from modern rewritten (for Atari emulators) version: Kolony 2106 https://www.youtube.com/watch?v=eX20Qqqm5eg - you get the idea? ;-)). OO Design is one thing, but I want to make it look as near as possible to the original (those windows-like menus in console window). I tried to use 'standard' Unicode characters (I can see that most of my Windows monospaced fonts have them) to draw frame around menu. Something like this: ┌──────────────╖ │ Construction ║ │ Production ║ │ Research ║ │ Exploration ║ ├··············╢ │ Next turn ║ ╘══════════════╝ (I like the look of double lines on right and at the bottom) But when I try to print those characters, I get an error: | Traceback (most recent call last): | File "E:\Moje dokumenty\python\kolony\menu.py", line 14, in <module> | """ | File "C:\Python34\lib\encodings\cp852.py", line 19, in encode | return codecs.charmap_encode(input,self.errors,encoding_map)[0] | UnicodeEncodeError: 'charmap' codec can't encode character '\u2556' in position 1 | 6: character maps to <undefined> Now I know what that means. Code page that my cmd.exe is using (852) doesn't have "╖", "╘", "╢" and "·" symbols. Changing code page to Unicode (65001) doesn't really help, because all is messed up: ┌──────────────╖ │ Construction ║ │ Production ║ │ Research ║ │ Exploration ║ ├··············╢ │ Next turn ║ ╘══════════════╝ �·········╢ │ Next turn ║ ╘══════════════╝ ��════════════╝ ��═════╝ ═╝ (I believe that's cmd.exe bug with Unicode support, not Python fault) Before I drop entirely this idea of using double lines on right and bottom edges, and make it look like this ┌──────────────┐ │ Construction │ ├--------------┤ │ Next turn │ └──────────────┘ I have to ask - is there a way to make that original concept work? I know, that CP437 has symbols "╖", "╢" and "╘", but does not have polish letters - and I need to display them too. I also know, that cmd.exe can display those Unicode characters (by copy/paste them in command line or by listing filenames containing that characters), no matter what CP is set. How does it manage to do it? Can I exploit that writing my Python program? Wiktor
There are multiple known problems with cmd.exe and unicode. A solution might be to use powershell, but windows being windows who really knows? :)
-- My fellow Pythonistas, ask not what our language can do for you, ask what you can do for our language. Mark Lawrence -- https://mail.python.org/mailman/listinfo/python-list