+ to_utf8 function to convert from icu::UnicodeString to utf-8 std::string
This commit is contained in:
parent
2257d63a65
commit
b423b45b22
1 changed files with 29 additions and 22 deletions
|
@ -29,6 +29,7 @@
|
||||||
#include <mapnik/config_error.hpp>
|
#include <mapnik/config_error.hpp>
|
||||||
// boost
|
// boost
|
||||||
#include <boost/variant.hpp>
|
#include <boost/variant.hpp>
|
||||||
|
#include <boost/scoped_array.hpp>
|
||||||
// stl
|
// stl
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -36,8 +37,33 @@
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
// uci
|
// uci
|
||||||
#include <unicode/unistr.h>
|
#include <unicode/unistr.h>
|
||||||
|
#include <unicode/ustring.h>
|
||||||
|
|
||||||
|
|
||||||
namespace mapnik {
|
namespace mapnik {
|
||||||
|
|
||||||
|
inline void to_utf8(UnicodeString const& input, std::string & target)
|
||||||
|
{
|
||||||
|
if (input.length() == 0) return;
|
||||||
|
|
||||||
|
const int BUF_SIZE = 256;
|
||||||
|
char buf [BUF_SIZE];
|
||||||
|
int len;
|
||||||
|
|
||||||
|
UErrorCode err = U_ZERO_ERROR;
|
||||||
|
u_strToUTF8(buf, BUF_SIZE, &len, input.getBuffer(), input.length(), &err);
|
||||||
|
if (err == U_BUFFER_OVERFLOW_ERROR || err == U_STRING_NOT_TERMINATED_WARNING )
|
||||||
|
{
|
||||||
|
boost::scoped_array<char> buf_ptr(new char [len+1]);
|
||||||
|
err = U_ZERO_ERROR;
|
||||||
|
u_strToUTF8(buf_ptr.get() , len + 1, &len, input.getBuffer(), input.length(), &err);
|
||||||
|
target.assign(buf_ptr.get() , len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
target.assign(buf, len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct value_null
|
struct value_null
|
||||||
{
|
{
|
||||||
|
@ -505,28 +531,9 @@ namespace mapnik {
|
||||||
{
|
{
|
||||||
std::string operator() (UnicodeString const& val) const
|
std::string operator() (UnicodeString const& val) const
|
||||||
{
|
{
|
||||||
/*
|
std::string utf8;
|
||||||
std::stringstream ss;
|
to_utf8(val,utf8);
|
||||||
UnicodeString::const_iterator pos = val.begin();
|
return "'" + utf8 + "'";
|
||||||
ss << std::hex ;
|
|
||||||
for (;pos!=val.end();++pos)
|
|
||||||
{
|
|
||||||
wchar_t c = *pos;
|
|
||||||
if (c < 0x80)
|
|
||||||
{
|
|
||||||
ss << char(c);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ss << "\\x";
|
|
||||||
unsigned c0 = (c >> 8) & 0xff;
|
|
||||||
if (c0) ss << c0;
|
|
||||||
ss << (c & 0xff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "\'" + ss.str() + "\'";
|
|
||||||
*/
|
|
||||||
return "TODO";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
Loading…
Reference in a new issue