Cannot print greek letters in Python 2.6

M

mefistofelis

I have the following script however when the clipboard contents are greek letters it fails to print them right.
I have used all posible encoding for greek letters including utf8 but to no avail so i just stay with latin1.

Can you suggest a solution?

Here is the script:

import win32clipboard
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
data = data.decode('latin1')
send = 'ccc|=:='+data
print data
print send

The following script is running from eventghost programm.
 
C

Chris Angelico

I have the following script however when the clipboard contents are greek letters it fails to print them right.
I have used all posible encoding for greek letters including utf8 but to no avail so i just stay with latin1.

You need to know what encoding is actually being used. Attempting to
decode using arbitrary encodings is doomed to failure. Possibly
Windows is using some kind of global default encoding, or possibly you
can query the other program for its encoding, but you're unlikely to
succeed by pointing the decode gun in random directions and firing.

Incidentally, you may find things easier if you switch to Python 3.3 -
quite a bit of Unicode handling is improved in Py3.

As a separate point, can you please use something better than Google
Groups for posting? There are many far better clients than GG, or you
can use the mailing list instead:

https://mail.python.org/mailman/listinfo/python-list

Google Groups is buggy and should not be used.

ChrisA
 
T

Terry Reedy

When you use a 3rd patch module like 'win32clipboard', you should give a
url for the source or doc. Were you using
http://docs.activestate.com/activepython/2.4/pywin32/win32clipboard.html

There are other programs on Pypi, such as pyclip.
You need to know what encoding is actually being used. Attempting to
decode using arbitrary encodings is doomed to failure. Possibly
Windows is using some kind of global default encoding, or possibly
you can query the other program for its encoding, but you're unlikely
to succeed by pointing the decode gun in random directions and
firing.

Searching "windows clipboard encoding" return pages such as
http://stackoverflow.com/questions/...fect-character-encoding-and-what-can-go-wrong
http://msdn.microsoft.com/en-us/library/windows/desktop/ms649015(v=vs.85).aspx
http://www.dmst.aueb.gr/dds/sw/outwit/winclip.html

These suggest that there should be utf-8 and/or utf-16le versions of any
text pasted.

http://docs.activestate.com/activepython/2.4/pywin32/win32clipboard__GetClipboardData_meth.html
say you could use
GetClipboardData(CF_UNICODETEXT)
which should reliably give you utf-16le.
I get the impression that CF_TEXT should be utf-8 but might not be.

EnumClipboardFormats
will let you see what is available.
Incidentally, you may find things easier if you switch to Python 3.3
- quite a bit of Unicode handling is improved in Py3.

At least use the *latest* version of 2.7 to get whatever unicode fixes
that have been made to 2.x.
 
S

Steven D'Aprano

I have the following script however when the clipboard contents are
greek letters it fails to print them right. I have used all posible
encoding for greek letters including utf8 but to no avail so i just stay
with latin1.

Can you suggest a solution?

Here is the script:

import win32clipboard
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
data = data.decode('latin1')

That cannot possibly work, since there are no Greek letters in Latin1. If
you run this piece of code, you will see no Greek letters except for µ
MICRO SIGN.


import unicodedata
for i in range(256):
c = chr(i).decode('latin-1')
print c, unicodedata.name(c, "<no name>")


I'm not an expert on Windows, but my guess is that the data coming out of
the clipboard could be using one of these encodings:

ISO-8859-7 # The code page used by some Greek versions of Windows.
UTF-16be
UTF-16
UTF-8


I'd try ISO-8859-7 and UTF-16be first, like this:

import win32clipboard
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
data = data.decode('UTF-16BE')
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top