Boost.Locale
encoding.hpp
1 //
2 // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
3 //
4 // Distributed under the Boost Software License, Version 1.0.
5 // https://www.boost.org/LICENSE_1_0.txt
6 
7 #ifndef BOOST_LOCALE_ENCODING_HPP_INCLUDED
8 #define BOOST_LOCALE_ENCODING_HPP_INCLUDED
9 
10 #include <boost/locale/config.hpp>
11 #include <boost/locale/info.hpp>
12 #include <boost/locale/encoding_errors.hpp>
13 #include <boost/locale/encoding_utf.hpp>
14 
15 #ifdef BOOST_MSVC
16 # pragma warning(push)
17 # pragma warning(disable : 4275 4251 4231 4660)
18 #endif
19 
20 namespace boost {
21  namespace locale {
22 
26  namespace conv {
31 
35  template<typename CharType>
36  std::basic_string<CharType> to_utf(char const *begin,char const *end,std::string const &charset,method_type how=default_method);
37 
41  template<typename CharType>
42  std::string from_utf(CharType const *begin,CharType const *end,std::string const &charset,method_type how=default_method);
43 
49  template<typename CharType>
50  std::basic_string<CharType> to_utf(char const *begin,char const *end,std::locale const &loc,method_type how=default_method)
51  {
52  return to_utf<CharType>(begin,end,std::use_facet<info>(loc).encoding(),how);
53  }
54 
60  template<typename CharType>
61  std::string from_utf(CharType const *begin,CharType const *end,std::locale const &loc,method_type how=default_method)
62  {
63  return from_utf(begin,end,std::use_facet<info>(loc).encoding(),how);
64  }
65 
69 
70  template<typename CharType>
71  std::basic_string<CharType> to_utf(std::string const &text,std::string const &charset,method_type how=default_method)
72  {
73  return to_utf<CharType>(text.c_str(),text.c_str()+text.size(),charset,how);
74  }
75 
79  template<typename CharType>
80  std::string from_utf(std::basic_string<CharType> const &text,std::string const &charset,method_type how=default_method)
81  {
82  return from_utf(text.c_str(),text.c_str()+text.size(),charset,how);
83  }
84 
88  template<typename CharType>
89  std::basic_string<CharType> to_utf(char const *text,std::string const &charset,method_type how=default_method)
90  {
91  char const *text_end = text;
92  while(*text_end)
93  text_end++;
94  return to_utf<CharType>(text,text_end,charset,how);
95  }
96 
100  template<typename CharType>
101  std::string from_utf(CharType const *text,std::string const &charset,method_type how=default_method)
102  {
103  CharType const *text_end = text;
104  while(*text_end)
105  text_end++;
106  return from_utf(text,text_end,charset,how);
107  }
108 
114  template<typename CharType>
115  std::basic_string<CharType> to_utf(std::string const &text,std::locale const &loc,method_type how=default_method)
116  {
117  return to_utf<CharType>(text.c_str(),text.c_str()+text.size(),loc,how);
118  }
119 
125  template<typename CharType>
126  std::string from_utf(std::basic_string<CharType> const &text,std::locale const &loc,method_type how=default_method)
127  {
128  return from_utf(text.c_str(),text.c_str()+text.size(),loc,how);
129  }
130 
136  template<typename CharType>
137  std::basic_string<CharType> to_utf(char const *text,std::locale const &loc,method_type how=default_method)
138  {
139  char const *text_end = text;
140  while(*text_end)
141  text_end++;
142  return to_utf<CharType>(text,text_end,loc,how);
143  }
144 
150  template<typename CharType>
151  std::string from_utf(CharType const *text,std::locale const &loc,method_type how=default_method)
152  {
153  CharType const *text_end = text;
154  while(*text_end)
155  text_end++;
156  return from_utf(text,text_end,loc,how);
157  }
158 
159 
163 
164  BOOST_LOCALE_DECL
165  std::string between(char const *begin,
166  char const *end,
167  std::string const &to_encoding,
168  std::string const &from_encoding,
170 
174 
175  inline
176  std::string between(char const *text,
177  std::string const &to_encoding,
178  std::string const &from_encoding,
180  {
181  char const *end=text;
182  while(*end)
183  end++;
184  return boost::locale::conv::between(text,end,to_encoding,from_encoding,how);
185  }
186 
190  inline
191  std::string between(std::string const &text,
192  std::string const &to_encoding,
193  std::string const &from_encoding,
195  {
196  return boost::locale::conv::between(text.c_str(),text.c_str()+text.size(),to_encoding,from_encoding,how);
197  }
198 
200 
201  template<>
202  BOOST_LOCALE_DECL std::basic_string<char> to_utf(char const *begin,char const *end,std::string const &charset,method_type how);
203 
204  template<>
205  BOOST_LOCALE_DECL std::string from_utf(char const *begin,char const *end,std::string const &charset,method_type how);
206 
207  template<>
208  BOOST_LOCALE_DECL std::basic_string<wchar_t> to_utf(char const *begin,char const *end,std::string const &charset,method_type how);
209 
210  template<>
211  BOOST_LOCALE_DECL std::string from_utf(wchar_t const *begin,wchar_t const *end,std::string const &charset,method_type how);
212 
213  #ifdef BOOST_LOCALE_ENABLE_CHAR16_T
214  template<>
215  BOOST_LOCALE_DECL std::basic_string<char16_t> to_utf(char const *begin,char const *end,std::string const &charset,method_type how);
216 
217  template<>
218  BOOST_LOCALE_DECL std::string from_utf(char16_t const *begin,char16_t const *end,std::string const &charset,method_type how);
219  #endif
220 
221  #ifdef BOOST_LOCALE_ENABLE_CHAR32_T
222  template<>
223  BOOST_LOCALE_DECL std::basic_string<char32_t> to_utf(char const *begin,char const *end,std::string const &charset,method_type how);
224 
225  template<>
226  BOOST_LOCALE_DECL std::string from_utf(char32_t const *begin,char32_t const *end,std::string const &charset,method_type how);
227  #endif
228 
229 
231 
233 
234  } // conv
235 
236  } // locale
237 } // boost
238 
239 #ifdef BOOST_MSVC
240 #pragma warning(pop)
241 #endif
242 
243 #endif
244 
245 
std::string from_utf(CharType const *begin, CharType const *end, std::string const &charset, method_type how=default_method)
std::basic_string< CharType > to_utf(char const *begin, char const *end, std::string const &charset, method_type how=default_method)
Default method - skip.
Definition: encoding_errors.hpp:55
std::string between(char const *begin, char const *end, std::string const &to_encoding, std::string const &from_encoding, method_type how=default_method)
method_type
Definition: encoding_errors.hpp:52