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

本文关键字:字节数 数组 返回 字节 UTF-8 字符串 转换 | 更新日期: 2023-09-27 18:37:15

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

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

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

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

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

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

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

似乎你想要的不是字符,而是代码点。在这种情况下,请看这个 SO 答案。

此代码:

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 字节数组。

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