C# 将指向UTF-8数组的指针传递给字符串(SByte*)安全吗
从msdn:C# 将指向UTF-8数组的指针传递给字符串(SByte*)安全吗,c#,.net,string,C#,.net,String,从msdn: public String(char* value) 将String类的新实例初始化为指向Unicode字符数组的指定指针所指示的值 public String(sbyte* value) 将String类的新实例初始化为指向8位有符号整数数组的指针所指示的值 所以第一个ctor接受(UTF-16)。但是第二种方法的有符号整数可以是字符串的UTF-8编码吗 Reflector或dotPeek不告诉任何事情: [MethodImpl(MethodImplOptions.Inter
public String(char* value)
将String类的新实例初始化为指向Unicode字符数组的指定指针所指示的值
public String(sbyte* value)
将String类的新实例初始化为指向8位有符号整数数组的指针所指示的值
所以第一个ctor接受(UTF-16)。但是第二种方法的有符号整数可以是字符串的UTF-8编码吗
Reflector或dotPeek不告诉任何事情:
[MethodImpl(MethodImplOptions.InternalCall), SecurityCritical, CLSCompliant(false)]
public extern unsafe String(sbyte* value);
如本测试所示,UTF8无法通过:
string s0 = "string test lé lù $§";
Console.WriteLine(s0);
var bytes = Encoding.UTF8.GetBytes(s0);
fixed (byte* p = bytes)
{
string s1 = new String((sbyte*)p);
Console.WriteLine(s1);
}
要将字节数组转换为字符数组,请使用编码类:
System.Text.Encoding.UTF8.GetChars()
另请参见GetDecoder
:
string s1 = new String((sbyte*)p, 0, bytes.Length, Encoding.UTF8);