将UTF-8字符串转换为sbyte数组并返回?

时间:2015-01-11 03:50:32

标签: c# arrays encoding utf-8

如何将字符串中的utf-8字符转换为sbytes和back数组?我似乎无法在Encoding.UTF中找到合适的方法。感谢

编辑:澄清。我不想要一个字节数组。我想要一个UTF-8字符数组。

编辑:我刚刚意识到我可以迭代字符串并将所有字符转换为整数以获得它们的int32表示。是否可以使用UTF-8?

2 个答案:

答案 0 :(得分:2)

UCS-2中的C#中的string(16位)非常接近UTF-16。

要将c#字符串转换为UTF-8,请执行以下操作:

var s = "plain text";
var encoded = Encoding.UTF8.GetBytes(s);
var decoded = Encoding.UTF8.GetString(encoded);

答案 1 :(得分:0)

看起来你不需要字符而是代码点。在这种情况下,请查看this SO answer

此代码:

static IEnumerable<int> AsCodePoints(this string s)
{
    for(int i = 0; i < s.Length; ++i)
    {
        yield return char.ConvertToUtf32(s, i);
        if(char.IsHighSurrogate(s, i))
            i++;
    }
}

允许您遍历字符串的每个代码点。如果需要,可以将每个代码点编码为UTF-8字节数组。

顺便说一句:你不能拥有&#34;一组UTF-8字符&#34;因为UTF-8字符没有数据类型。你能得到的最好的是char(UCS-2代码单元)或byte [],它是代码点的UTF-8编码。 由于UTF-8是如何将文本转换为byte []的惯例,因此&#34; UTF-8字符的概念&#34;似乎很矛盾。