UnicodeDecode error while printing line (#539258)
Alexander Belchenko
bialix at ukr.net
Tue Mar 16 15:43:05 GMT 2010
Parth Malwankar пишет:
> On Tue, Mar 16, 2010 at 1:57 PM, Alexander Belchenko <bialix at ukr.net> wrote:
>> Alexander Belchenko пишет:
>>>
>>> To write lines of the versioned files you need to use
>>> encoding_type = 'exact'
>>>
>>> But for writing [possible] unicode text to the terminal you need to use
>>> 'replace' in most situations.
>>>
>>> So without looking at the code in your plugin I'd say you need 'exact'.
>>>
>>> But if you need to use also unicode output then you need both 'exact' and
>>> 'replace'. This can be done although slightly non-trivial.
>>>
>>> 2 Martin Pool: I think UI class should provide both encoded and raw output
>>> stream. I'm not sure is it already done, so excuse me if this is already
>>> exists.
>> OK, IIUC this is now done via
>> UIFactory.make_output_stream(encoding_type='exact')
>>
>
> Thanks for the pointer Alexander.
>
> I am assuming I can override encoding_type in my derived class
> cmd_grep the same way as I override takes_args, takes_options etc.
> For some reason thats not working. I get the same error. I tried both,
> 'exact' and 'replace'. I also tried overriding _setup_outf and hardcoding
> 'exact' but that didn't work either.
I don't understand what it means "thats not working".
See bzrlib/builtins.py class cmd_cat and you'll see there:
encoding_type = 'exact'
So it's *actually* works. Can you show the traceback with 'exact'?
In your case according to the traceback error occurs in the line:
File "/home/parthm/.bazaar/plugins/grep/grep.py", line 240, in
_file_grep
outf.write(pfmt % (line,))
What is pfmt there?
> At the moment I just decode the lines before outf.write. i.e.
>
> line = line.decode(_user_encoding, 'replace')
> outf.write(pfmt % (line,))
>
> That seems to be working ok with no errors, but I am not sure if its
> the right way to use outf.
I think this is wrong way. Especially because on Windows if you print
text to the terminal you should use terminal_encoding, not user_encoding.
More information about the bazaar
mailing list