 MyGUIEngine/include/MyGUI_UString.h |  4 ++--
 MyGUIEngine/src/MyGUI_TextView.cpp  | 11 ++++++++---
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/MyGUIEngine/include/MyGUI_UString.h b/MyGUIEngine/include/MyGUI_UString.h
index 11d9679d6..97f03e10a 100644
--- a/MyGUIEngine/include/MyGUI_UString.h
+++ b/MyGUIEngine/include/MyGUI_UString.h
@@ -163,10 +163,10 @@ namespace MyGUI
 		static const size_type npos = std::numeric_limits<size_t>::max();
 
 		//! a single 32-bit Unicode character
-		using unicode_char = uint32;
+		using unicode_char = char32_t;
 
 		//! a single UTF-16 code point
-		using code_point = uint16;
+		using code_point = char16_t;
 
 		//! value type typedef for use in iterators
 		using value_type = code_point;
diff --git a/MyGUIEngine/src/MyGUI_TextView.cpp b/MyGUIEngine/src/MyGUI_TextView.cpp
index 295820c57..e463f4226 100644
--- a/MyGUIEngine/src/MyGUI_TextView.cpp
+++ b/MyGUIEngine/src/MyGUI_TextView.cpp
@@ -120,7 +120,7 @@ namespace MyGUI
 			return;*/
 
 		result.height += _height;
-
+		Char lastChar = 0;
 		for (; index != end; ++index)
 		{
 			Char character = *index;
@@ -197,10 +197,11 @@ namespace MyGUI
 			if (info == nullptr)
 				continue;
 
-			if (FontCodeType::Space == character || FontCodeType::Tab == character)
+			if (FontCodeType::Space == character || FontCodeType::Tab == character || character >= 0x2000 || lastChar >= 0x2000)
 			{
 				roll_back.set(line_info.symbols.size(), index, count, width);
 			}
+			lastChar = character;
 
 			float char_width = info->width;
 			float char_height = info->height;
@@ -222,7 +223,7 @@ namespace MyGUI
 			float char_fullAdvance = char_bearingX + char_advance;
 
 			// перенос слов
-			if (_maxWidth != -1 && (width + char_fullAdvance) > _maxWidth && !roll_back.empty())
+			if (_maxWidth != -1 && width > 0 && (width + char_fullAdvance) > _maxWidth && !roll_back.empty())
 			{
 				// откатываем до последнего пробела
 				width = roll_back.getWidth();
@@ -246,6 +247,10 @@ namespace MyGUI
 				// отменяем откат
 				roll_back.clear();
 
+				lastChar = 0;
+				character = *index;
+				if (FontCodeType::Space != character && FontCodeType::Tab != character)
+					index--;
 				continue;
 			}
 
