#include "../../include/unicode/utfconversion.h"\r
\r
+#ifdef _WIN32\r
+#include "../../include/pstdint.h"\r
+#endif\r
+\r
namespace UTFConversion\r
{\r
\r
const UTF8 *sourcestart=reinterpret_cast<const UTF8 *>(&utf8string[0]);\r
const UTF8 *sourceend=sourcestart+utf8string.size();\r
\r
- if(sizeof(wchar_t)==2)\r
+ if(sizeof(std::wstring::value_type)==2 && sizeof(UTF16)==2)\r
{ \r
UTF16 *deststart=reinterpret_cast<UTF16 *>(&dest[0]);\r
UTF16 *destend=deststart+dest.size();\r
wcstring.assign(dest.begin(),dest.end()-(destend-deststart));\r
\r
}\r
- else if(sizeof(wchar_t)==4)\r
+ else if(sizeof(std::wstring::value_type)==4 && sizeof(UTF32)==4)\r
{\r
UTF32 *deststart=reinterpret_cast<UTF32 *>(&dest[0]);\r
UTF32 *destend=deststart+dest.size();\r
}\r
else\r
{\r
- return false;\r
+ std::vector<uint32_t> dest2(utf8string.size(),0);\r
+ UTF32 *deststart=reinterpret_cast<UTF32 *>(&dest2[0]);\r
+ UTF32 *destend=deststart+dest2.size();\r
+\r
+ ConversionResult rval=ConvertUTF8toUTF32(&sourcestart,sourceend,&deststart,destend,lenientConversion);\r
+\r
+ if(rval!=conversionOK)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ wcstring.assign(dest2.begin(),dest2.end()-(destend-deststart));\r
+\r
}\r
\r
return true;\r
}\r
\r
std::vector<std::wstring::value_type> source(wcstring.begin(),wcstring.end());\r
- \r
- if(sizeof(std::wstring::value_type)==2)\r
+\r
+ if(sizeof(std::wstring::value_type)==2 && sizeof(UTF16)==2)\r
{\r
std::vector<std::string::value_type> dest(wcstring.size()*2,0);\r
\r
utf8string.assign(dest.begin(),dest.end()-(destend-deststart));\r
\r
}\r
- else if(sizeof(std::wstring::value_type)==4)\r
+ else if(sizeof(std::wstring::value_type)==4 && sizeof(UTF32)==4)\r
{\r
std::vector<std::string::value_type> dest(wcstring.size()*4,0);\r
\r
}\r
else\r
{\r
- return false;\r
+ std::vector<uint32_t> source2(wcstring.begin(),wcstring.end());\r
+ std::vector<std::string::value_type> dest(wcstring.size()*sizeof(std::wstring::value_type),0);\r
+ \r
+ const UTF32 *sourcestart=reinterpret_cast<const UTF32 *>(&source2[0]);\r
+ const UTF32 *sourceend=sourcestart+source2.size();\r
+\r
+ UTF8 *deststart=reinterpret_cast<UTF8 *>(&dest[0]);\r
+ UTF8 *destend=deststart+dest.size();\r
+\r
+ ConversionResult rval=ConvertUTF32toUTF8(&sourcestart,sourceend,&deststart,destend,lenientConversion);\r
+\r
+ if(rval!=conversionOK)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ utf8string.assign(dest.begin(),dest.end()-(destend-deststart));\r
+\r
}\r
\r
return true;\r