Simon Falsig created THRIFT-2870:
------------------------------------

             Summary: C++ TJSONProtocol using locale dependent formatting
                 Key: THRIFT-2870
                 URL: https://issues.apache.org/jira/browse/THRIFT-2870
             Project: Thrift
          Issue Type: Bug
          Components: C++ - Library
    Affects Versions: 0.9
         Environment: Linux, Boost 1.51
            Reporter: Simon Falsig


I'm using Thrift for serializing objects (in C++) into JSON strings, which I 
then store as files. This usually works fine, but if the locale of my system is 
set to a locale where the decimal separator is ',' instead of '.' (for instance 
in Denmark), then the TJSONProtocol (specifically the writeJSONDouble function 
that does the double to string conversion through a boost::lexical_cast) will 
also use this separator when serializing doubles. 

This kinda plays havoc with the JSON specification, which does not allow for 
localized formatting, and depends on always using '.' as a decimal separator. I 
could imagine that there may be other more subtle places where the local can 
have an effect, but this is currently the only place I've been having trouble 
with.

I can see that the same problem has been fixed for C# (commit
3da317bda100130b2f615034c46b0944888f0f14 / THRIFT-1245 C# JSON Protocol uses 
culture-dependant decimal separator for double) but it doesn't seem as if 
there's a similarly easy way to fix boost::lexical_cast...

Note that I'm using Thrift 0.9.0, but as far as I can see there hasn't been any 
relevant changes to TJSONProtocol.cpp since.

Relevant thread on thrift-user mailing list can be found here: 
http://mail-archives.apache.org/mod_mbox/thrift-user/201412.mbox/%3c7c2463f510dbb7548b4718e202ac1...@mail.gmail.com%3e



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to