gpt4 book ai didi

c# - System.Uri 在 .NET 4.5+ 中删除 Unicode RLM(从右到左标记;U+200F)字符

转载 作者:行者123 更新时间:2023-12-03 14:06:12 26 4
gpt4 key购买 nike

using System;

namespace UnicodeRlm
{
class Program
{
static void Main(string[] args)
{
var uri = new Uri(
"https://example.com/attachments/The title is \"مفتاح معايير الويب!‏\" in Arabic.pdf");
Console.WriteLine(uri.AbsolutePath);
Console.WriteLine(uri.AbsolutePath.Length);
}
}
}
在 .NET 4.0 下,这会产生
/attachments/The%20title%20is%20%22%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20%D9%85%D8%B9%D8%A7%D9%8A%D9%8A%D8%B1%20%D8%A7%D9%84%D9%88%D9%8A%D8%A8!%E2%80%8F%22%20in%20Arabic.pdf
168
在 .NET 4.5+ 下,这会产生
/attachments/The%20title%20is%20%22%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20%D9%85%D8%B9%D8%A7%D9%8A%D9%8A%D8%B1%20%D8%A7%D9%84%D9%88%D9%8A%D8%A8!%22%20in%20Arabic.pdf
159
.NET 4.5 删除了 %E2%80%8F部分,即 RLM特点:
...!%E2%80%8F%22%20in%20Arabic.pdf
...!%22%20in%20Arabic.pdf
我有一个假设,这是由 System.Uri escaping now supports RFC 3986 引起的,但是我的 RFC-fu 和 Unicode-fu 没有让我知道这个 RFC 是否需要 RLM 被删除,或者这个 RLM 字符是否完全正确地放置在原始字符串中。
我不完全确定这是否是正确的行为标准,但对我来说肯定不是,因为我无法在 .NET 4.5 中下载名称中带有 RLM 字符的文件,也不能使用 WebClient也不与 HttpWebRequest .
有什么办法可以解决这个怪癖吗?

最佳答案

在 .Net 4.5 中默认启用国际资源标识符支持。
当以 .Net 4.7.2 为目标时,从右到左的标记似乎再次受到尊重,这可能表明存在错误。
如果项目需要针对.Net 4.5,方法 ToggleIDNIRI支持this post可以帮助克服这个问题。
像这样调用方法:

ToggleIDNIRISupport(false);
在此方法调用后构造 URI 时,它包含从右到左的标记。

关于c# - System.Uri 在 .NET 4.5+ 中删除 Unicode RLM(从右到左标记;U+200F)字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65805812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com