Use utf32 for unicode emoji later

This commit is contained in:
Benau 2019-03-03 15:10:34 +08:00
parent e01393bff7
commit bb84677e35

View File

@ -146,6 +146,8 @@ public:
/** Allows to read a buffer from the beginning again. */ /** Allows to read a buffer from the beginning again. */
void reset() { m_current_offset = 0; } void reset() { m_current_offset = 0; }
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
/** Encode string with max length of 16bit and utf32, used in motd or
* chat. */
BareNetworkString& encodeString16(const irr::core::stringw& value) BareNetworkString& encodeString16(const irr::core::stringw& value)
{ {
uint16_t str_len = (uint16_t)value.size(); uint16_t str_len = (uint16_t)value.size();
@ -153,7 +155,7 @@ public:
str_len = 65535; str_len = 65535;
addUInt16(str_len); addUInt16(str_len);
for (unsigned i = 0; i < str_len; i++) for (unsigned i = 0; i < str_len; i++)
addUInt16((uint16_t)value[i]); addUInt32(value[i]);
return *this; return *this;
} }
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
@ -162,10 +164,13 @@ public:
uint16_t str_len = getUInt16(); uint16_t str_len = getUInt16();
for (unsigned i = 0; i < str_len; i++) for (unsigned i = 0; i < str_len; i++)
{ {
uint16_t c = getUInt16(); uint32_t c = getUInt32();
// In the future convert for windows
if (c > 65535)
c = 20; // whitespace
out->append((wchar_t)c); out->append((wchar_t)c);
} }
return str_len + 2; return str_len * 4 + 2;
} }
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
BareNetworkString& encodeString(const std::string &value); BareNetworkString& encodeString(const std::string &value);