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

C# 将UTF-8字符串转换为sbyte数组并返回?,c#,arrays,encoding,utf-8,C#,Arrays,Encoding,Utf 8,如何将字符串中的utf-8字符转换为sbytes数组并返回?我似乎在Encoding.UTF中找不到合适的方法。谢谢 编辑:澄清。我不想要字节数组。我想要一个UTF-8字符数组 编辑:我刚刚意识到我可以迭代字符串,并将所有字符转换为int,以获得它们的int32表示形式。是否可以改用UTF-8?在UCS-2(16位)的C#中使用一个非常接近UTF-16的字符串 要将c#字符串转换为UTF-8,请执行以下操作: var s = "plain text"; var encoded = Encodin

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

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

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

在UCS-2(16位)的C#中使用一个非常接近UTF-16的
字符串

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

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

似乎您想要的不是字符,而是代码点。在这种情况下,请看

此代码:

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++;
    }
}
static IEnumerable AsCodePoints(此字符串为s)
{
对于(int i=0;i
允许您迭代字符串的每个代码点。如果需要,可以将每个代码点编码为UTF-8字节数组

顺便说一句:您不能有“UTF-8字符数组”,因为UTF-8字符没有数据类型。您可以得到的最佳结果是char(UCS-2代码单元)或byte[],它是一个代码点的UTF-8编码。
由于UTF-8是如何将文本翻译成字节[]的约定,“UTF-8字符”的概念似乎相互矛盾。

您的“UTF-8字符”是如何表示的?由于C#char/strings不是utf-8,我假设您有字节数组(但您不会问这样的问题),或者您有文件或流中的字符。。。如果您的字符位于流/文件中,那么直接调用
stream.Read
file.ReadAllBytes
将是解决方案。请澄清。这是一个包含UTF-8字符的WPF文本框字符串。VS在调试中正确地表示它们,所以我假设它将使用UTF-8。它用什么?UTF-32?我不相信你知道UTF-8是什么。查一下,确定一下。它与Unicode不同。我知道什么是UTF-8。它用可变字节长度编码字符以保持与ascii兼容。作为问题的一部分,要将其转换回,请使用
var back=Encoding.UTF8.GetString(encoded)
我不懂。GetBytes为我提供了一个字节数组,但由于utf-8字符可能比一个字节长得多,因此它们会扩展到几个字节。我需要的是utf-8字符串中每个字符的字节值的数字表示数组,而不是每个字节的值。