public string ReadUTF8StringSafe()
{
if (m_Index >= m_Size)
return String.Empty;
int count = 0;
int index = m_Index;
while (index < m_Size && m_Data[index++] != 0)
++count;
index = 0;
byte[] buffer = new byte[count];
int value = 0;
while (m_Index < m_Size && (value = m_Data[m_Index++]) != 0)
buffer[index++] = (byte)value;
string s = UTF8.GetString(buffer);
bool isSafe = true;
for (int i = 0; isSafe && i < s.Length; ++i)
isSafe = IsSafeChar((int)s[i]);
if (isSafe)
return s;
StringBuilder sb = new StringBuilder(s.Length);
for (int i = 0; i < s.Length; ++i)
{
if (IsSafeChar((int)s[i]))
sb.Append(s[i]);
}
return sb.ToString();
}