On 5/23/13 8:30 , "Stefan Hajnoczi" <stefa...@gmail.com> wrote:
>On Tue, May 21, 2013 at 11:34:16AM -0400, Tomoki Sekiyama wrote: >> qemu-ga in Windows may return error message with multibyte characters >> when the guest OS language is set to other than English. To display such >> messages correctly, this encodes the message based on the locale >>settings. >> >> Signed-off-by: Tomoki Sekiyama <tomoki.sekiy...@hds.com> >> --- >> QMP/qmp.py | 4 +++- >> 1 file changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/QMP/qmp.py b/QMP/qmp.py >> index c551df1..ee21819 100644 >> --- a/QMP/qmp.py >> +++ b/QMP/qmp.py >> @@ -11,6 +11,7 @@ >> import json >> import errno >> import socket >> +import locale >> >> class QMPError(Exception): >> pass >> @@ -133,7 +134,8 @@ class QEMUMonitorProtocol: >> def command(self, cmd, **kwds): >> ret = self.cmd(cmd, kwds) >> if ret.has_key('error'): >> - raise Exception(ret['error']['desc']) >> + enc = locale.getpreferredencoding() >> + raise Exception(ret['error']['desc'].encode(enc)) > >You should not need to explicitly encode the error descriptor. The >error description should be UTF-8 on the wire and a Unicode Python >string in this script. > >I think the real problem is: > >1. Guest qga is writing strings in local encoding onto the wire. The error description Guest qga writes is encoded like: {"error": {"class": "GenericError", "desc": "\u64CD\u4F5C\u306F..."}} I feel this is correct (\u64CD is a correct representation of single character in Unicode). >or > >2. qmp.py isn't UTF-8-decoding strings received over the wire. And qmp.py can decode this correctly, and ret['error']['desc'] is Unicode Python string. The problem looks like in python Exception, that cannot print out the message at all if it contains non-ascii Unicode string: % python >>> raise Exception(u"abc") Traceback (most recent call last): File "<stdin>", line 1, in <module> Exception: abc >>> raise Exception(u"abcü") Traceback (most recent call last): File "<stdin>", line 1, in <module> Exception while the "print" doesn't have this issue: >>> print(u"abcü") abcü >Either or both bugs could be present. Once they are fixed you shouldn't >see encoding problems. > >Stefan Anyway, as I understood this patch for qmp.py is not correct way to fix this issue, I'm going to drop it from the series. Thanks, Tomoki Sekiyama