[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH v3 11/11] QMP/qmp.py: set locale for excepti
From: |
Tomoki Sekiyama |
Subject: |
Re: [Qemu-devel] [RFC PATCH v3 11/11] QMP/qmp.py: set locale for exceptions to display non-ascii messages correctly |
Date: |
Fri, 24 May 2013 18:55:21 +0000 |
On 5/23/13 8:30 , "Stefan Hajnoczi" <address@hidden> 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 <address@hidden>
>> ---
>> 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
- [Qemu-devel] [RFC PATCH v3 01/11] configure: Support configuring c++ compiler, (continued)
- [Qemu-devel] [RFC PATCH v3 01/11] configure: Support configuring c++ compiler, Tomoki Sekiyama, 2013/05/21
- [Qemu-devel] [RFC PATCH v3 07/11] qemu-ga: call Windows VSS requester in fsfreeze command handler, Tomoki Sekiyama, 2013/05/21
- [Qemu-devel] [RFC PATCH v3 08/11] qemu-ga: install Windows VSS provider on `qemu-ga -s install', Tomoki Sekiyama, 2013/05/21
- [Qemu-devel] [RFC PATCH v3 10/11] QMP/qemu-ga-client: make timeout longer for guest-fsfreeze-freeze command, Tomoki Sekiyama, 2013/05/21
- [Qemu-devel] [RFC PATCH v3 11/11] QMP/qmp.py: set locale for exceptions to display non-ascii messages correctly, Tomoki Sekiyama, 2013/05/21
- [Qemu-devel] [RFC PATCH v3 03/11] Add a script to extract VSS SDK headers on POSIX system, Tomoki Sekiyama, 2013/05/21
- Re: [Qemu-devel] [RFC PATCH v3 03/11] Add a script to extract VSS SDK headers on POSIX system, Laszlo Ersek, 2013/05/24
[Qemu-devel] [RFC PATCH v3 04/11] qemu-ga: Add an configure option to specify path to Windows VSS SDK, Tomoki Sekiyama, 2013/05/21