过时Uri(string, bool)
构造用于从已经转义字符串构造一个URI(如果无效字符串被呈现过时想必不打破程序)。但是,我发现自己处于需要通过URI传递字面字节的情况,并且我想不出一种更好的方式来编码它们。用什么来代替dontReplace来构造一个数据URI?
我构建data:
URI,这是通过整个资源,而不是它的标识符的标准方法。虽然我知道它有一个;base64
符标记为编码以base64传递的数据,有情况时,URI是没有的base64短,例如,当有较少的二进制数据。因为我不想担心编码问题,所以我只想使用HttpUtility.UrlEncode(byte[])
将字节与URI一起作为URI编码的字符串传递。
因为我几乎没有别的选择,只能让.NET为我编码字符串,而不必使用过时的构造函数,并且没有构造函数(应该有,在我看来),我是什么构造URI的选项?
我想过使用Encoding.GetEncoding(1252)
创建从字节的串,并使用,作为CP1252可以解码任何字符,但似乎内部乌里编码方法使用UTF-8来编码的字符,所以我不根本不可能使用文本编码。
我有什么选择?如果没有其他方法,继续使用过时的构造函数可以吗?
数据URI在1998 RFC中定义,根据规范,可以指定charset来正确解释数据。因为这个原因,'data:text/plain; charset = windows-1250,%A9'显示©符号,但是data:text/plain; charset = utf-8,%A9'没有。数据是基于类型和字符集解释的,而不是基于UTF-8的。数据可能不完全是文本的,只是大多数文本与中间有一些二进制数据,这仍然会使base64效率低下。 – IllidanS4
是的,事实上它与RFC使UTF-8成为在URI中转义工作的基础一样。 –