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

Reply via email to