I think it should remain a PrintStream. The PrintWriter still uses a
charset by defaulting to the platform encoding, but you have no way to
choose it unless you specify that you are writing to a file. I think
PrintWriter needs some more constructor options when giving it an
OutputStream, but that's just my opinion. At least with PrintWriter you
have the option to choose the charset when giving it an OutputStream.

What might make sense is to change the SimpleLoggerContext constructor to
pull out the charset name from the props when falling into the case where
it is creating a FileOutputStream. All you need to change is the line that
currently reads like this:

ps = new PrintStream(os);

change it to something like this:

final String charset =
props.getStringProperty(SimpleLoggerContext.SYSTEM_PREFIX + "charset");
if (charset != null) {
  ps = new PrintStream(os, false, charset);
} else {
  ps = new PrintStream(os);
}

That will need another catch block, but that shouldn't be a big problem to
figure out.



On Mon, Mar 24, 2014 at 12:20 AM, Matt Sicker <[email protected]> wrote:

> From what I can tell, it's when you use OutputStream instead of Writer
> that you need to specify charsets. I think the writers have a more friendly
> configuration mechanism just via Java properties or something. I'm not
> fully sure, actually.
>
>
> On 23 March 2014 23:09, Ralph Goers <[email protected]> wrote:
>
>> For StatusLogger you would then have to add a charset attribute to the
>> configuration element wouldn't you?
>>
>> Ralph
>>
>> On Mar 23, 2014, at 7:09 PM, Matt Sicker <[email protected]> wrote:
>>
>> It's mainly for StatusLogger, but that idea did cross my mind.
>>
>>
>> On 23 March 2014 21:00, Ralph Goers <[email protected]> wrote:
>>
>>> I'm sorry, I didn't ask the question correctly.  SimpleLogger doesn't
>>> currently accept a charset. Are you planning on adding a new properly to
>>> SimpleLoggerContext to support this?  I don't really have an objection but
>>> am just wondering when other than the platform's default encoding would
>>> want to be used. After all, SimpleLogger wasn't really meant to be what
>>> people actually used on purpose.
>>>
>>> Ralph
>>>
>>> On Mar 23, 2014, at 6:01 PM, Matt Sicker <[email protected]> wrote:
>>>
>>> It's right there in the docs:
>>> http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html
>>>
>>> All characters printed by a PrintStream are converted into bytes using
>>> the platform's default character encoding. The 
>>> PrintWriter<http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html>
>>>  class
>>> should be used in situations that require writing characters rather than
>>> bytes.
>>>
>>>
>>> On 23 March 2014 18:54, Ralph Goers <[email protected]> wrote:
>>>
>>>> How will it improve charset handling?  Currently a charset isn't
>>>> configured.
>>>>
>>>> Ralph
>>>>
>>>> On Mar 23, 2014, at 3:58 PM, Matt Sicker <[email protected]> wrote:
>>>>
>>>> Would it be alright to migrate to using PrintWriter instead of
>>>> PrintStream? This improves charset handling, plus Java recommends using
>>>> Writers over OutputStreams for textual content.
>>>>
>>>> --
>>>> Matt Sicker <[email protected]>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Matt Sicker <[email protected]>
>>>
>>>
>>>
>>
>>
>> --
>> Matt Sicker <[email protected]>
>>
>>
>>
>
>
> --
> Matt Sicker <[email protected]>
>



-- 

Bruce Brouwer

Reply via email to