从字节数组中的任何位置解码以零结尾的UTF-8字符串

时间:2013-02-24 13:24:23

标签: .net string utf-8 bytearray decode

我在FCL中寻找类似于Encoding.UTF8.GetString(bytes, index, count)的方法,但不需要count参数,而是假设给定索引处的字符串为空 - 终止。

我发布我当前的解决方案作为答案(见下文),但我很想知道是否有人知道更优雅或更好的方法。

1 个答案:

答案 0 :(得分:1)

我已经写了自己的方法,因为我还没有在FCL找到一个:

using System.Text;

string GetZeroTerminatedUTF8StringAt(byte[] bytes, int index)
{
    int zeroTerminatorIndex = Array.IndexOf<byte>(bytes, value: 0, startIndex: index);
    if (zeroTerminatorIndex >= index)
    {
        return Encoding.UTF8.GetString(bytes, index, count: zeroTerminatorIndex - index);
    }
    else
    {
        throw new ArgumentOutOfRangeException("index", "No zero-terminator found.");
    }
}

虽然这有效,但它有一个小问题:假设除'\0'之外的任何字符都不会包含UTF-8编码中的0字节。虽然事实确实如此,但如果将这个假设完全封装在Encoding.UTF8类中,那就更好了。