diff --git a/lib/imc_channel.hpp b/lib/imc_channel.hpp index 3c72363..07e4e67 100644 --- a/lib/imc_channel.hpp +++ b/lib/imc_channel.hpp @@ -10,7 +10,9 @@ #include #include #include +#if defined(__linux__) || defined(__APPLE__) #include +#endif //---------------------------------------------------------------------------// @@ -147,8 +149,10 @@ namespace imc // convert encoding of any descriptions, channel-names, units etc. class iconverter { - std::string in_enc_, out_enc_; + #if defined(__linux__) || defined(__APPLE__) iconv_t cd_; + #endif + std::string in_enc_, out_enc_; size_t out_buffer_size_; public: @@ -156,6 +160,7 @@ namespace imc iconverter(std::string in_enc, std::string out_enc, size_t out_buffer_size = 1024) : in_enc_(in_enc), out_enc_(out_enc), out_buffer_size_(out_buffer_size) { + #if defined(__linux__) || defined(__APPLE__) // allocate descriptor for character set conversion // (https://man7.org/linux/man-pages/man3/iconv_open.3.html) cd_ = iconv_open(out_enc.c_str(), in_enc.c_str()); @@ -169,10 +174,12 @@ namespace imc throw std::runtime_error(errmsg); } } + #endif } void convert(std::string &astring) { + #if defined(__linux__) || defined(__APPLE__) if ( astring.empty() ) return; std::vector in_buffer(astring.begin(),astring.end()); @@ -214,6 +221,7 @@ namespace imc std::string outstring(out_buffer.begin(),out_buffer.end()-outbytes); astring = outstring; } + #endif }; // channel diff --git a/python/IMCtermite.pyx b/python/IMCtermite.pyx index a764189..7cd5939 100644 --- a/python/IMCtermite.pyx +++ b/python/IMCtermite.pyx @@ -5,6 +5,16 @@ from IMCtermite cimport cppimctermite import json as jn import decimal +import platform + +# auxiliary function for codepage conversion +def get_codepage(chn) : + if platform == 'Windows' : + chndec = jn.loads(chn.decode(errors="ignore")) + chncdp = chndec["codepage"] + return 'utf-8' if chncdp is None else chncdp + else : + return 'utf-8' cdef class imctermite: @@ -22,7 +32,7 @@ cdef class imctermite: # get JSON list of channels def get_channels(self, bool include_data): chnlst = self.cppimc.get_channels(True,include_data) - chnlstjn = [jn.loads(chn.decode(errors="ignore")) for chn in chnlst] + chnlstjn = [jn.loads(chn.decode(get_codepage(chn),errors="ignore")) for chn in chnlst] return chnlstjn # print single channel/all channels diff --git a/python/VERSION b/python/VERSION index 09843e3..280a1e3 100644 --- a/python/VERSION +++ b/python/VERSION @@ -1 +1 @@ -2.0.9 +2.0.12