Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-2870

C++ TJSONProtocol using locale dependent formatting

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 0.9
    • Fix Version/s: 0.9.3
    • Component/s: C++ - Library
    • Labels:
      None
    • Environment:

      Linux, Boost 1.51

      Description

      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/%3c7c2463f510dbb7548b4718e202ac1e45@mail.gmail.com%3e

      I've also attached a quick patch that works on my setup (see the patch file comments for more information).

        Attachments

        1. use-classic-locale-for-cpp-json_4.patch
          2 kB
          Simon Falsig
        2. json_double_with_boost_math.patch
          3 kB
          Konrad Grochowski
        3. initial.txt
          2 kB
          Simon Falsig
        4. fixed.txt
          2 kB
          Simon Falsig
        5. failing.txt
          2 kB
          Simon Falsig

          Activity

            People

            • Assignee:
              hcorg Konrad Grochowski
              Reporter:
              simonfalsig Simon Falsig
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: