【发布时间】:2019-12-08 14:07:22
【问题描述】:
我有一个 Span<byte> 代表转义字符串 UTF-8,例如:
二进制表示:
byte[20] { 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 32, 92, 117, 50, 48, 97, 99, 32, 33 }
转义表示:"Hello world \u20ac !"
所需的二进制结果:
byte[17] { 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 32, 226, 130, 172, 32, 33 }
我尝试使用GetString() 方法对转码的\u20ac 进行转码:
Encoding.UTF8.GetBytes(Encoding.UTF8.GetString())
但这并不是在逃避输入。
有什么方法可以达到同样的效果吗?
// Not working solution
public void NotWorkingUnescape(ReadOnlySpan<byte> source, Span<byte> destination)
{
var tmp = Encoding.UTF8.GetString(source);
Encoding.UTF8.GetBytes(tmp, destination);
}
// Unknown solution
// UTF-8 escaped byte array -> UTF8-8 unescaped byte array
public void FastUnescape(ReadOnlySpan<byte> source, Span<byte> destination)
{
// ?
}
【问题讨论】:
-
我尝试了您发布的代码,但没有任何转义。结果与输入相同。
-
你说得对,我没抓住重点。将更新问题。
-
解决方案可能来自JsonReader解析器:github.com/dotnet/runtime/blob/…
标签: c# .net performance .net-core utf-8