過時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中轉義工作的基礎一樣。 –